Почему бесконечность число?
В JavaScript isNaN(Infinity)
возвращает false, как если бы Infinity была числом; но некоторые арифметические операции над бесконечностью ведут себя так, как будто это математическая бесконечность, а не число:
Итак, почему не isNaN(Infinity)
вернуть истину? Это потому, что его значение по умолчанию равно объекту Number?
2 ответа
Бесконечность не NaN
потому что вы можете использовать его в математических выражениях. очевидно 1 + NaN
никогда не сработает, но 1 + Infinity
возвращается Infinity
( См. Здесь). Многие из примеров, которые у вас есть в вашей ссылке, являются математически неопределенными, поэтому они возвращаются как Nan. Например, Infinity * 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('==================');
});