js中的null和undefined

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

有不足之处,欢迎指正交流。

原文地址:https://www.cnblogs.com/coiorz/p/4727649.html