1.not defined
console.log(a);
//报错:a is not defined 终止运行
执行结果:报错并提示:Uncaught ReferenceError: a is not defined,如图:
个人理解:not defined可以翻译为未定义的,上面代码中的a没有被定义,所以会报错并提示not defined。
2.undefined
一个定义了但未赋值的变量:
var a;
console.log(a);
//未报错,提示: undefined
一个定义了但把值赋为undefined的变量:
var a = undefined;
console.log(a);
//未报错,提示: undefined
一个对象没有赋值的属性:
console.log(window.a);
//未报错,提示: undefined
var a = [];
console.log(a.b);
//未报错,提示: undefined
var a = {};
console.log(a.b);
//未报错,提示:undefined
一个没有返回值的函数:
function a() {
}
console.log(a())
执行结果:上面代码执行结果一样:不会报错,会打印出undefined,如图:个人理解:undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。典型用法是:
(1)变量被声明了,但没有赋值时,就等于undefined。
(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
注意:not defined 和 undefined 的typeof()的值都为"undefined",所以无法用typeof()来判断这两者。
3.null
var a = document.getElementById('main');
console.log(a);
执行结果:不会报错,会打印出null,如图:null表示"没有对象",即该处不应该有值。典型用法是:
(1) 作为函数的参数,表示该函数的参数不是对象。
(2) 作为对象原型链的终点。
Object.getPrototypeOf(Object.prototype)
// null
个人理解:上面的代码中如果实际上没有id为main的元素,a则是null,所以null是真正不存在的东西。另外null是一个只有一个值的特殊类型。表示一个空对象引用,用typeof检测返回是object。第二种的undefined是派生自null,所以有undefined==null。
4.NaN
var a;
console.log(a*2);
执行结果:不会报错,会打印出NaN,如图:个人理解:NaN是"Not a Number " 的简写,从字面上看为不是数字的意思,当运算无法返回正确的数值时,就会返回NaN值。也可以理解一下W3C给出的定义和用法:NaN 属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。可以把 Number 对象设置为该值,来指示其不是数字值。
注意:null是一种特殊的object;NaN是一种特殊的number。