undefined
undefined和null都表示不是值的值,undefined 指没有值或从未赋值 在非严格模式下,我们可以为全局标识符 undefined 赋值
function fn(){
undefined = 0
console.log(undefined); //undefined
}
fn()
严格模式下,但是将undefined设置为全局var之后,都可以打印出值
function foo(){
"use strict"
undefined = 0
console.log(undefined); //TypeError
}
foo()
void
undefined 是一个内置标识符,它的值为 undefined,通过 void 运算符即可得到该值。void让表达式不返回值
var a = 42;
console.log( void a, a ); // undefined 42
null
null 指空值或曾赋过值,但是目前没有值
NaN
如果数学运算的操作数不是数字类型(或者无法解析为常规的十进制或十六进制数字), 就无法返回一个有效的数字,这种情况下返回值为 NaN
var a = 2 / "foo";
console.log(a); //NaN
console.log(typeof a === "number"); // true
console.log(Infinity/Infinity); //NaN
NaN 是一个特殊值,它和自身不相等,是唯一一个非自反
console.log(NaN == NaN); // false
window.isNaN() 来判断一个值是否是NaN
结果并不太准确
var a = 2 / "foo";
var b = "foo";
var c = 0 / -3;
console.log(window.isNaN(a)); //true
console.log(window.isNaN(b)); //true
console.log(c); //-0
console.log(window.isNaN(c)); //false
Number.isNaN()
结果准确很多,但是对于Infinity还是识别不出来
var a = 2 / "foo";
var b = "foo";
var c = 0 / -3;
console.log(Number.isNaN(a)); //true
console.log(Number.isNaN(b)); //false
console.log(c); //-0
console.log(Number.isNaN(c)); //false
Object.is() 判断两个值是否绝对相等
var c = 0 / -3;
console.log(Object.is(c, -0)); //true