数值
2023年02月10日
一、NaN
NaN
是Number
的特殊值。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
-
NaN != NaN
-
NaN !== NaN
-
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
类型的 NaN
和 Number
类型的 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));