一、简单介绍
null 和undefined都是JavaScript里的简单数据类型,平时很容易弄混他俩的用法与区别。一般静态类型语言里都只有一个来表示“空”的类型,比如java里的null,那为什么JavaScript里有两个呢?
在设计JavaScript之初,就只有null来代表空,null可以通过Number()转换成0。但是设计者觉得一个不够。原因如下:
1. null被当成一个对象,在JavaScript中,有原始类型和合成类型两大类,设计者觉得用对象来表示空不好。
2. JavaScript设计之初没有错误处理机制,如果数据类型不匹配,要么自动转换类型,要么就默默失败,null会自动转换成0,这样很不容易发现错误。
所以,undefined诞生了。
二、null和undefined的相同
1. 在if语句中 二者都会被自动转成false。
if (!undefined)
console.log('undefined is false');
// undefined is false
if (!null)
console.log('null is false');
// null is false
undefined == null
// true
2. 二者通过parseInt转换都是NaN
parseInt(null)
NaN
parseInt(undefined)
NaN
三、二者的不同
最初的时候区分是这样的: null表示一个无的对象,转换为数值时是0, undefined表示无的原始值,转成数值是NaN.
但是实际用的时候,发现不行啊 ,他俩太像了。
null表示没有对象,此处不该有值。
经常用在:
①表示函数的参数,代表此参数不是对象
② 作为对象原始链的终点。
Object.getPrototypeOf(Object.prototype)
// null
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