javascript中undefined和null的区别

来源:互联网 发布:java动态添加方法 编辑:程序博客网 时间:2024/06/07 14:19

javascript中有七种内置类型,分别是:
- 空值(null )
- 未定义(undefined )
- 布尔值(boolean )
- 数字(number )
- 字符串(string )
- 对象(object )
- 符号(symbol ,ES6 中新增)

但是null和undefined这两种类型很让人迷惑。因为两者的差别很小。

null == undefined;//true

其中null还有很奇怪的表现,比如:

typeof undefined === "undefined"; // truetypeof null === "object"; // true

这其实是javascript的一个bug。

null和undefined的区别

null是一个表示”无”的对象,转为数值时为0;undefined是一个表示”无”的原始值,转为数值时为NaN。
null表示”没有对象”,即该处不应该有值。典型用法是:

  1. 作为函数的参数,表示该函数的参数不是对象。
  2. 作为对象原型链的终点。
Object.getPrototypeOf(Object.prototype)// null

undefined表示”缺少值”,就是此处应该有一个值,但是还没有定义。典型用法是:

  1. 变量被声明了,但没有赋值时,就等于undefined。
  2. 调用函数时,应该提供的参数没有提供,该参数等于undefined。
  3. 对象没有赋值的属性,该属性的值为undefined。
  4. 函数没有返回值时,默认返回undefined。
var i;i // undefinedfunction f(x){console.log(x)}f() // undefinedvar  o = new Object();o.p // undefinedvar x = f();x // undefined

总结

简而言之,区别就是:
undefined是一个对象被声明但未初始化的(未定义的)。
null是用来存放一个空的对象的,也就是被声明而且已经初始化了。