null与undefined的区别

261 阅读1分钟

历史问题

在1995年js被发明时,c++等其他其他语言只有null而没有undefined,且null来表示对象(引用数据类型)没有值。由于js分为原始数据类型与复杂数据类型(引用数据类型)。js的发明者认为有必要用另一个单词来表示原始值的无。所以发明了undefined来表示。

undefined

  • undefined表示原始值的初始值。undefined含义为未定义
  • 会出现下面几种情况为undefined:
    1. 变量声明了,但是未赋值。此变量为undefined
    2. 对象的属性未赋值 此属性为undefined
    3. 调用函数应提供的参数提供但是没提供。此参数为undefined
    4. 函数没有返回值。执行后返回undefined
    5. viod() 能创造一个undefined
  • 由于历史中为了区分开null和undefined。 Number(undefined) 返回 NaN
  • 在IE8浏览器以前 undefined不为关键字,是允许 var undefined = 1; console.log(undefined);// 1 这样执行的。但是在当前的浏览器中上面的代码也允许,但是执行的内容都为undefined; 也就是当前浏览器undefined被当作变量名赋值时都会返回undefined var undefined = 1; console.log(undefined);// undefined

null

  • null表示复杂数据类型的初始值,也叫对象的初始值。null含义为空对象的引用,所以 typeof null // "object"
  • null作为原型链的终点 Object.getPrototypeOf(Object.prototype) // null
  • 作为函数的参数,表示函数的参数不是对象。