null:Null类型,代表 “空值”,代表一个空对象指针,使用typeof运算得到 “object” ,所以可以认为它是一个特殊的对象值。
undefined:Undefined类型,当一个声明了一个变量未初始化时,得到的就是 undefined。
null是javascript的关键字,可以认为是对象类型,它是一个空对象指针,和其他语言一样都代表“空值”,不过undefined却是javascript才有的。undefined是在ECMAScript第三版引入的,为了区分指针对象和未初始化的变量,它是一个预定义的全局变量。没有返回值的函数返回为undefined,没有实参的形参也是undefined。
javascript权威指南:null 和 undefined 都表示 “值的空缺”,你可以认为 undefined 是表示系统级的、出乎意料的或类似错误的值的空缺,而null是表示程序级的、正常的或在意料之中的值的空缺。
javascript高级程序设计:在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined。unll值则是表示空对象指针。
typeof undefined // undefined
typeof null // object
null == undefined // true
ECMAScript认为 undefined 是从 null 中派生出来的,所以把它们定义为相等的。但是,如果在一些情况下,我们一定要区分这两个值,那么可以使用下面的方法:
1、 null === undefined // false
2、 typeof null === typeof undefined // false
采坑点:
undefined + 6 // NaN
null + 6 // 6
根据C语言的传统,null被设计成可以自动转为0
目前的用法
null表示 “没有对象”,即该处不应该有值。
(1)作为函数的参数,表示该函数的参数不是对象。
(2)作为对象原型链的终点。
undefined表示“缺少值”,就是此处应该有一个值,但是还没有定义。
(1)变量被声明了,但没有赋值时,就等于undefined。
(2)调用函数时,应该提供的参数没有提供,该参数就等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
使用实例
转化的时候,undefined为NaN,null为0.
Number(undefined) // NaN
Number(undefined + 10) //NaN
Number(null) // 0
Number(10 + null) // 10
undefined === null //false
undefined == null //true