js中的特殊数值

111 阅读1分钟

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