标签:
JS里的6大类型: number,string,boolean,null,undefined,object,其中null和undefined就占了2个位子,而它们的作用都是代表空,在平时的工作中我也完全没有发现这两者之间的差异,那它们到底有什么区别呢。
主要体现在语义上:
null表示一个值被定义了,定义为“空值”。undefined表示值根本没被定义,值不存在。换句话说,设置一个值为null是合理的,而设置一个值为undefined是不合理的。
注意不管值是null还是undefined,变量必须声明,否则是会报错的,这和访问属性的值是不同的。
var a; var b = {}; console.log(a === undefined); //true console.log(a === null); //false console.log(c); //报错 console.log(b.x === undefined); //true console.log(b.x === null); //false
当访问属性时,会调用内部的[[get]]方法(详见汤姆大叔的深入理解javascript系列),在原型链上没找到属性的话则返回undefined。
O.[[Get]](P): // 如果是自己的属性,就返回 if (O.hasOwnProperty(P)) { return O.P; } // 否则,继续分析原型 var __proto = O.[[Prototype]]; // 如果原型是null,返回undefined // 这是可能的:最顶层Object.prototype.[[Prototype]]是null if (__proto === null) { return undefined; } // 否则,对原型链递归调用[[Get]],在各层的原型中查找属性 // 直到原型为null return __proto.[[Get]](P)
再回到我们的话题,所以如果判断一个值是否存在,那么应该使用obj.value === undefined而不应用null。
在平时常见的情况中:
1.原型链的终点是null
2.变量声明没有赋值是undefined
3.对象没有定义的属性值是undefined
4.函数没有返回值时,返回undefined
5.调用函数时,缺失的参数值是undefined
有不足之处,欢迎指正交流。
标签:
原文地址:http://www.cnblogs.com/coiorz/p/4727649.html