跳到主要内容

数值

2023年02月10日
柏拉文
越努力,越幸运

一、NaN


NaNNumber的特殊值。NaN 不等于任何值,不大于任何值,不小于任何值(包括自身)。NaN 只可以用Number.isNaN 来判断是否为NaN

1.1 规则

console.log(NaN > 3) // false
console.log(NaN < 3) // false
console.log(NaN == 3) // false

console.log(NaN > NaN) // false
console.log(NaN < NaN) // false
console.log(NaN == NaN) // false
console.log(NaN == false) // false
console.log(Boolean(NaN)) // false
console.log(Number.isNaN(NaN)) // true
  1. NaN != NaN

  2. NaN !== NaN

  3. NaN !== 任何值

1.2 类型

NaN 属于 Number 类型

console.log(typeof NaN); // number

1.3 创建

当算术运算返回一个未定义的或无法表示的值时,NaN就产生了。但是,NaN并不一定用于表示某些值超出表示范围的情况。将某些不能强制转换为数值的非数值转换为数值的时候,也会得到NaN

  • 产生情况一、0 除以 0

    const result = 0/0;  // NaN

1.4 检测

isNaN(): String 类型的 NaNNumber 类型的 NaN 都可以检测

const str = 'NaN';
const num = NaN;

console.log(isNaN(str)); // true
console.log(isNaN(num)); // true

Number.isNaN(): 只有 Number 类型的 NaN 都可以检测

const str = 'NaN';
const num = NaN;

console.log(Number.isNaN(str)); // false
console.log(Number.isNaN(num)); // true

Custom isNaN() By NaN !== NaN

function isNaNSelf(a, b) {
return a !== a && b !== b;
}

console.log(isNaNSelf(NaN, NaN));

二、+0 -0


2.1 规则

2.2 检测

+0 === -0

function is(a, b) {
return a === b;
}

console.log(is(+0, -0));

+0 !== -0

function is(a, b) {
if (a === b) {
return a !== 0 || 1 / a === 1 / b;
}
}

console.log(is(+0, -0));