Почему NaN! = NaN?

У него было время программируя в языке сценариев JavaScript и никогда я не заметил это своеобразие, которое у него есть со стоимостью NaN.

Я принял решение быть исследовано и больше, что я нашел, он был: NaN - язык сценариев JavaScript | MDN / [английский язык].

Я понял, что NaN это ссылка «Not на Number» (это не число) но я не остаюсь ясным, из-за которого NaN не равен другому NaN используя оператор ==, ===.

parseFloat('NaN') == parseFloat('NaN'); // false
parseFloat('NaN') == NaN; // false
NaN == NaN; // false

Что происходит на логическом уровне, который равенство не выполняет?: из-за которого он не применяется также для выражения undefined == undefined?

5
задан 01.07.2019, 20:45
3 ответа

Такой он такой, как он был определен и имеет смысл, например представляет следующий случай:

var a = 1/"lunes"; //NaN
var b = Math.sqrt(-1) //NaN

Так a как b они дают как результат NaN. Сейчас: он тебе кажется правильным, что были равны?

Именно поэтому используется функция isNaN() чтобы проверять, ли мы перед одним NaN или это не вместо того, чтобы пробовать сравнивать против другого NaN

Это не применяется в undefined потому что у этого есть точное значение: Не определенный идентификатор. Взамен NaN это удача недействительной стоимости, для которого в других языках она была бы ошибкой во время выполнения или исключение

19
ответ дан 03.12.2019, 23:00
  • 1
    В твоем ответе, как ты упоминаешь; он мне не кажется правильным, что 1/"lunes" был равен Math.sqrt(-1). Потому что первый - неопределенные немного , пока второй - nú простой комплекс . Но он мне не кажется немного очевидным, когда я спрашиваю из-за Math.sqrt(-1) == Math.sqrt(-1), так как deberí чтобы обрабатывать информацию того же nú простой комплекс. Также из-за 1/undefined == 1/undefined. – Francute 15.12.2017, 12:38
  • 2
    Но nú простые комплексы не существуют в Javascript. Mí редкий этой формы, результата operació n уже он не number и операторы == и! = просто не está n определенные таким же образом как для numbers. Ademá s каково различие между NaN и другим NaN?, Как спрашивать, который является различием между 1 и другим 1? – Carlos Muñoz 15.12.2017, 15:32
  • 3
    Назначая встречу: " каково различие между NaN и другим NaN?, Как спрашивать, который является различием между 1 и другим 1? " Эта эра выдвинутое сомнение, если нет различия; 1 == 1 deberí в , его быть NaN == NaN. В настоящее время чтобы понимать decisió n, что направили, я интерпретирую, что 1 está определенный, это nú морской окунь 1 partí cularmente. definició n NaN взамен - набор из стоимости: любая вещь, кроме nú морской окунь. И хороший, поскольку это примитивная стоимость, он не содержит свойство, чтобы знать qué operació n он порождается, подтвердив 2 NaN, тогда прямо они считаются различными. – Francute 15.12.2017, 22:53

Проверяя документацию NaN

Ты увидишь, что он комментирует

NaN никогда не является эквивалентным с любым другим числом, включая тот же NaN; ты не можешь проверять стоимость not-a-number сравнивая это с Number. NaN. Использовать функцию isNaN () для того.

Или же ты должен использовать isNaN() чтобы добиваться того, что ты выдвигаешь.

Я хочу подумать, что это такое, потому что говорится об объекте, который сравнивается ссылкой, использовав == poreso две ссылки не будут равны.

Оно не последует за тем же самым с undefined, потому что это примитивная стоимость, это не объект как NaN, поэтому ты можешь сравнивать это с равным.

2
ответ дан 03.12.2019, 23:00
  • 1
    ´ NaN´ это не объект. Это примитивная стоимость. Они не равны, потому что decidió что это не были. Вопрос bá sicamente он: ¿ Каковой была ló gica, чтобы брать эту decisió n?. – Francute 15.12.2017, 12:27

В простых словах NaN Not a Number (NaN нет один nГєmero), и поскольку его нет один nГєmero, это любая вещь. Не возможно сравнивать любую вещь стороны с любой вещью в другой стороне, а следовательно ничто не гарантирует, что оба равны. Например не возможно делать эту comparaciГіn:

(0.0 / 0.0) == (0.0 / 0.0)  // false

Это comparaciГіn то же самое что:

NaN == NaN; // false

В языке сценариев JavaScript undefined - тип информации , равно как это это Number, String, Boolean, Object или Array. В языке сценариев JavaScript, в отличие от других языков programaciГіn с крепостью tipado, у нас могут быть переменные типа undefined.

Вкратце, в языке сценариев JavaScript, все те переменные, которые не были определены (следовательно, они не существуют), или что были определены, не распределяя стоимости им, всегда типа undefined.

, Из-за которого lГіgicamente, сравнив две вещи, которые считает самими тип информации , в этом случае undefined, он возвращает Verdadero.

Снабжает ссылками: Java Лангвахе Спесификатион (JLS)

3
ответ дан 03.12.2019, 23:00