2016-05-31 12 views
-3

В JavaScript isNaN(Infinity) возвращает false, как если бы Бесконечность была числом; но несколько арифметических операций на бесконечности ведут себя, как если бы это была математическая бесконечность, которая не является числом:Почему бесконечность номер?

enter image description here

Итак, почему же не isNaN(Infinity) возвращение верно? Это потому, что its value defaults to a Number object?

+0

Бесконечность число ... Также NaN это число, то оно просто не равно сама. –

+2

Функция IsNaN просто проверяет, соответствует ли значение значению «NaN». Это не проверка, если что-то не число. Infinity! = NaN. – ManoDestra

+0

@JanDvorak 'typeof NaN === 'number'', но' isNaN (NaN) === true' –

ответ

1

Infinity не NaN, потому что вы можете использовать его в математических выражениях. Очевидно, 1 + NaN никогда не сработает, но 1 + Infinity возвращает Infinity (See here). Многие примеры, которые у вас есть в вашей ссылке, математически неопределенные, поэтому они возвращаются как Нан. Например, Infinity * 0 является неопределенным (See here).

Надеюсь, это поможет.

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('=================='); 
 
});