本文参考阮神的博客,外加自己的一些实验,记录一下null和undefined的注意点
null和undefined在JavaScript中的含义
null的含义
null
是JavaScript的关键字,常用来描述“空值”。- 在浏览器的控制台对
null
用typeof
函数
typeof(null)
返回的是object
,可以认为null
是一个特殊的对象值,含义是“无对象”。
* 对null
使用Number
函数
Number(null);
10+null;
返回0,说明在装换为数字的时候识别为0
* 在转为布尔型的时候
if(!null)
console.log("null is false");
语句执行,说明null
在转换为布尔值的时候是’false’
undefined的含义
undefined
不是JavaScript的关键字,用未定义的值表示更深层次的“空值”。undefined
是预定义的全局变量,它的值就是“未定义”.- 对
undefined
使用typeof
函数
typeof(undefined);
返回的还是undefined
,表明这个值是这个类型的唯一成员。
* 使用Number
函数
Number(undefined);
返回值是NaN
,说明转化为数字的时候是NaN
* 转化为布尔值的时候
if(!undefined)
console.log("undefined is false");
转为布尔值的时候表示为false
null和undefined的差别
if(null==undefined)
console.log("相等");
else
console.log("不相等");
if(null===undefined)
console.log("相等");
else
console.log("不相等");
通过==
和===
的判断,null
和undefined
本质上是不相等的,==
判断的情况下是因为==
在判断之前先进行类型的转换,转为布尔型之后都是false相等。而===
没有进行类型转换的比较。
当前null和undefined的用法
上面这样的区分,在实践中会被证明不可行。目前,null和undefined基本是同义的,只有一些细微的差别。
null表示”没有对象”,即该处不应该有值。典型用法是:
- 作为函数的参数,表示该函数的参数不是对象。
- 作为对象原型链的终点。
Object.getPrototypeOf(Object.prototype)
// null
undefined表示”缺少值”,就是此处应该有一个值,但是还没有定义。典型用法是:
- 变量被声明了,但没有赋值时,就等于undefined。
- 调用函数时,应该提供的参数没有提供,该参数等于undefined。
- 对象没有赋值的属性,该属性的值为undefined。
- 数组元素没有被赋值
- 函数没有返回值时,默认返回undefined。
var i;
i // undefined
function f(x){console.log(x)}
f() // undefined
var o = new Object();
o.p // undefined
var x = f();
x // undefined