2013-05-17 2 views
7

Если мы alert(null==undefined), он выводится на true.Почему null == undefined является истинным в javascript

Какова логическая причина этого.

Это что-то, что жестко закодировано в javascript или есть объяснение этому.

+1

да ... Вы можете указать мне на какой-то материал, где он говорит, что причина в том, и не только, что она равна: P – Nav

+0

Я бы сказал, потому что не определено значит ничего aswel, если ваш DIV не иметь идентификатор, он не определен или мы можем сказать, что он не существует, null, void. –

+0

вы можете объяснить, как работает оператор ==, когда дело доходит до сравнения неопределенного и нулевого – Nav

ответ

15

Спецификация языка explicitly says:

Если х равно нулю, и у не определено, возвращает истину

Я не в курсе каких-либо записей в процессе разработки языка, объясняющие рассуждения для это решение, но у == есть правила для обработки разных типов, а «null» и «undefined» - это то, что означает «ничего», поэтому с их равностью делает интуитивный смысл.

(Если вы не хотите путаницы, используйте вместо этого ===).

+0

, поэтому вы хотите сказать, что это жестко запрограммированный huh ??? – Nav

+1

Err, да. Это часть основного языка. – Quentin

+0

скажите мне одну вещь ... когда мы используем ==, типы становятся равными, а затем проверены на равенство правильно? тип undefined не определен, а тип null - это объект, тогда объект == undefined ??? – Nav

4

По той же причине, что 0 == "0" - Javascript свободно напечатал - если что-то может быть преобразовано к чему-то другому, то это будет, если вы не используете ===

alert(null===undefined); 

Даст вам ложь.

Что касается того, почему происходят эти конкретные преобразования - ответ довольно просто, «спецификация говорит, что это должно произойти». Там не обязательно должна быть причина, отличная от «потому что она говорит так», почему язык программирования ведет себя определенным образом.

+1

не могли бы вы объяснить, что именно превращается в что? – Nav

+1

Потому что это то, что говорит спецификация языка. Там не обязательно должна быть причина, отличная от «документации говорит так» – PhonicUK

3

Использование двухуровневого оператора заставляет Javascript делать принуждение типа.

Другими словами, когда вы делаете x == y, если x и y не одного и того же типа, JavaScript будет отбрасывать одно значение на другое, прежде чем сравнивать, например, если строка и число сравниваются, строка всегда отливают в ряд а затем сравнивается

По этой причине многие сравнения смешанных типов в JavaScript могут приводить к неожиданным или контр-интуитивным результатам.

Если вы хотите делать сравнения в JavaScript, обычно лучше использовать оператор тройного равенства ===, а не двойной. Это не приводит к принуждению типа; вместо этого, если типы разные, он возвращает false. Это чаще всего то, что вам нужно.

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

+0

Это должен быть лучший ответ. Отличное объяснение! –

-3

Оператор сравнения == не проверяет типы. null и undefined обе возвращается false. Вот почему ваш код действительно проверяет, равен ли falsefalse.

> null == undefined; 
< true 
> false == false 
< true 

Однако их типы не равны.

> typeof undefined; 
< "undefined" 
> typeof null; 
< "object" 

Из-за этого, следующий оператор вернет ложь, как === оператор сравнения проверок обоих типов и их стоимости.

> undefined === null; 
< false 
+0

Почему проголосовали? Пожалуйста, объясните .. – Broxzier

+1

Ответ: 'он просто делает логические числа, цифры или строки данных, которые необходимо проверить ', неверно, как объясняет ответ Квентина. 'null 'и' undefined' не преобразуются в другой тип, у них есть собственные правила. –

+0

@AshBurlaczenko Обновлен мой ответ. – Broxzier

Смежные вопросы