null和undefined的异同

253 阅读2分钟

一、简单介绍

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