在网页里面的写javascript的疑问: alert(name)会弹出对话框,内容为空 alert(age)时没反应
因为window.name是空字符串,window.age是undefined,所以你alert(age)会报错,alert(name)会出对话框
你需要弄明白三个概念:
1:什么是undefined?javascript的undefined其实有两个概念,一种就是报错的时候说某个变量undefined,这个时候它是形容词,说某个变量没定义,还有一种就是javascript的一个顶级对象,他就是一个object,跟字符串,数字一样,这个时候它是名词
2:alert什么时候会报错呢?并不是你传递一个参数等于undefined(名词)它就报错,而是你传给它一个undefined(形容词)参数它才报错,比如下面两种情况都不会报错:
alert(undefined);
var a = undefined;alert(a);
在这两句中其实undefined都是通过一个声明过的变量作为一个代表传递个alert的,第一句是隐藏变量,你不知道它的名字,是机器替你创建的,第二句就是a变量,alert首先找到变量,然后变量指向undefined对象,不会打乱javascript运行机制,所以把可以把undefined打印出来
但是如果你从来没声明过一个变量,比如直接写个alert(age);而age这个变量从来没出现过,它也不是当前运行域中的默认变量,alert处理age的时候就看不懂它,更不会通过它找到undefined对象
3:javascript的变量都是在自己的scope内才有效,最外层的scope就是window,你平时看到的全局变量其实全都是寄存在window对象下面,alert(name)其实调用的是alert(window.name),它不会报错是因为window有name成员,只不过它是个空字符串而已,而age不同,window.age根本不存在,所以就会导致运行期错误
多重随机标签