javascript中的null和undefined
简言之:
udefined代表没有赋值的基本数据类型。
null代表没有赋值的引用数据类型。
以上两句话是别人的总结,我理解的是:null如果是一个引用变量的值(因为也可以直接把一个非引用变量设为null),有两种情况,一种是引用变量指向的对象不存在,这时会返回null;一种是将引用变量设为null,也就是说不指向任何对象,这时已存在的对象会被自动回收
eg1:
var p=document.getElementById("p");//假设p不存在
alert(p);//指向的对象不存在,返回null
eg2:
var p=[2,3,4];
p=null;
alert(p);//对象(数组)还在,但是没有引用指向它,也就无法对它进行操作,会被自动回收机制回收,释放掉内存
该死的笔试题:
typeof(null);//object,理解为null代表无值的引用
typeof(undefined);//undefined,规定,死记
alert(null==undefined);//true
alert(null===undefined);//false
alert(123+null);//123
alert(null+123);//123
undefined参与任何数值计算时,其结果一定是NaN。
关于预解析:
关于预解析(构造执行上下文):当代码加载入浏览器后,就会对全部代码进行一次'扫描',这个'扫描'的过程就是预解析的过程,这个时候会将所有声明的变量赋于undefined值。然后再从上到下执行代码。
看一个示例:
var a = 'hello world';
alert(a);
当浏览从载入到执行会经过如下过程:
载入代码,并进行预解析,此时会将a的值设为undefined
从上到下执行代码,当执行到var a='hello world'时,此时才会真正为a赋于'hello world'值。执行到alert(a);时,弹出窗口hello world.
也正是由于这个过程,解释了预解析会混淆undefined,如:
var a;
var b = undefined;
其实际执行时为:
var a = undefined;
var b = undefined;
b = undefined;
所以说无法判断a与b定义时的不同。
以上参考:@笨蛋的座右铭