在JavaScript中,isNaN(Infinity)
返回false,就好像Infinity是一个数字;但是Infinity上的几个算术运算就好像它是数学无穷大,而不是数字:
那么,为什么没有isNaN(Infinity)
返回真实?是因为its value defaults to a Number object?
答案 0 :(得分:1)
Infinity不是NaN
,因为你可以在数学表达式中使用它。显然1 + NaN
永远不会有效,但1 + Infinity
会返回Infinity
(See here)。链接中的许多示例都是数学 indeterminate ,这就是他们返回Nan的原因。例如,Infinity * 0
是不确定的(See here)。
希望这有帮助。
答案 1 :(得分:0)
isNaN(Infinity)
返回false
的原因与数学技术性无关,只是因为它的实现与此相同:
function isNaN(object) {
var coerced = +object;
return coerced !== coerced;
}
换句话说,它强制输入Number
。如果确定强制值为NaN
(通过检查它是否与其自身严格相等),则返回true
。否则返回false
。
[Infinity, null, undefined, true, new Date(), {}, [], [1], [1,2,3], 'blah', '4'].forEach(function (object) {
console.log('object: ' + (typeof object !== 'number' ? JSON.stringify(object) : object));
console.log('coerced: ' + (+object));
console.log('isNaN: ' + isNaN(object));
console.log('==================');
});