Насколько я знаю, в математике и Infinity, и NaN являются неопределенными значениями. как все мы знаем:

console.log(NaN == NaN); //-> false

Пока

console.log(Infinity==Infinity); //-> true

Мне интересно, почему результатом второго кода является true. Я ожидаю, что результатом второго будет false, но это не так.

Не могли бы вы помочь мне. Я действительно ценю это. Благодарю.

2
reza 7 Дек 2016 в 22:24

4 ответа

Лучший ответ

В дополнение к другим ответам: Потому что в спецификации так сказано.

NaN - единственное значение в JavaScript, которое не равно самому себе:

Надежный способ для кода ECMAScript проверить, является ли значение X NaN, является выражением формы X! == X. Результат будет истинным тогда и только тогда, когда X является NaN.

http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.2.4

1
Timo 7 Дек 2016 в 19:35

infinity обрабатывается как числовое значение, поэтому infinity==infinity представляет одно числовое значение, равное другому. В то время как в обычной математике бесконечность нельзя сравнивать с бесконечностью, в javascript это возможно!

NaN с другой стороны, это тип неопределенной переменной, а не число. Таким образом, сравнения между NaN не являются логически сопоставимыми. Правильный способ сравнения с NaN - с помощью функции isNaN.

Примере:

isNaN(NaN) // returns true

-1
Bryant Jackson 7 Дек 2016 в 19:30

Вот почему:

NaN сравнивает неравное (через ==,! =, === и! ==) любое другое значение, включая другое значение NaN. Используйте Number.isNaN () или isNaN (), чтобы наиболее четко определить, является ли значение NaN. Или выполните само-сравнение: NaN, и только NaN, будут сравнивать неравные с собой.

Источник: https://developer.mozilla.org/ EN-US / Docs / Web / JavaScript / Справка / Global_Objects / NaN

Начальное значение бесконечности - Number.POSITIVE_INFINITY. Значение Бесконечность (положительная бесконечность) больше любого другого числа. Это значение ведет себя математически как бесконечность; например, любое положительное число, умноженное на бесконечность, равно бесконечности, а все, что делится на бесконечность, равно 0.

Источник: https://developer.mozilla.org/ EN-US / Docs / Web / JavaScript / Справка / Global_Objects / бесконечность

Также вас может заинтересовать использование метода isFinite Number:

Number.isFinite(Infinity);  // false
Number.isFinite(NaN);       // false

Читайте о Number.isFinite (): https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite

3
manonthemat 7 Дек 2016 в 19:30

Потому что процессоры интерпретируют это так. Большая часть математики в JS соответствует спецификации IEEE-754 для плавающей математической арифметики, которую процессоры реализуют довольно конкретные способы. Это включает NaN !== NaN и Infinity === Infinity, среди прочего.

1
ssube 7 Дек 2016 в 19:29