javascript中有七种内置类型,分别是:
- 空值(null )
- 未定义(undefined )
- 布尔值(boolean )
- 数字(number )
- 字符串(string )
- 对象(object )
- 符号(symbol ,ES6 中新增)
但是null和undefined这两种类型很让人迷惑。因为两者的差别很小。
null == undefined;//true
其中null还有很奇怪的表现,比如:
typeof undefined === "undefined"; // true
typeof null === "object"; // true
这其实是javascript的一个bug。
null和undefined的区别
null是一个表示”无”的对象,转为数值时为0;undefined是一个表示”无”的原始值,转为数值时为NaN。
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
总结
简而言之,区别就是:
undefined是一个对象被声明但未初始化的(未定义的)。
null是用来存放一个空的对象的,也就是被声明而且已经初始化了。