历史问题
在1995年js被发明时,c++等其他其他语言只有null而没有undefined,且null来表示对象(引用数据类型)没有值。由于js分为原始数据类型与复杂数据类型(引用数据类型)。js的发明者认为有必要用另一个单词来表示原始值的无。所以发明了undefined来表示。
undefined
- undefined表示原始值的初始值。undefined含义为未定义
- 会出现下面几种情况为undefined:
- 变量声明了,但是未赋值。此变量为undefined
- 对象的属性未赋值 此属性为undefined
- 调用函数应提供的参数提供但是没提供。此参数为undefined
- 函数没有返回值。执行后返回undefined
- viod() 能创造一个undefined
- 由于历史中为了区分开null和undefined。
Number(undefined)返回 NaN - 在IE8浏览器以前 undefined不为关键字,是允许
var undefined = 1; console.log(undefined);// 1这样执行的。但是在当前的浏览器中上面的代码也允许,但是执行的内容都为undefined; 也就是当前浏览器undefined被当作变量名赋值时都会返回undefinedvar undefined = 1; console.log(undefined);// undefined
null
- null表示复杂数据类型的初始值,也叫对象的初始值。null含义为空对象的引用,所以
typeof null // "object"。 - null作为原型链的终点
Object.getPrototypeOf(Object.prototype) // null - 作为函数的参数,表示函数的参数不是对象。