2015-10-21 1 views
0

Я уже три раза в консоли.Что преобразовывается 0 при сравнении с использованием == в JavaScript?

!5 is actually false 
0 is a falsy value, so 
0 == !5 is true 

Хорошо, но когда я попробовал этот

!0 is true 
5 is a truthy, so 
5 == !0 should be true 

Но его нет, консоль говорит ложь. Почему это происходит?

+4

* 5 будет преобразовано в false *? – DontVoteMeDown

+0

Как связанный с вами вопрос связан с вашим вопросом? – j08691

+0

Потому что (5 ==! 0) эквивалентно (5 == true), что неверно. –

ответ

5

Причина, по которой последняя строка false заключается в том, что == не является простым булевым преобразованием. Он обычно пытается преобразовать операнды с несогласованными типами вплоть до числа.

Так что 5 не нуждается в конверсии, так как это уже номер, но !0, что составляет true. Значение true преобразуется в 1, поэтому не совпадает 5.

Вы можете сделать вывод, что 1 == !0 будет true, и это действительно так.

Это подробно описано в спецификации ES5 в Abstract Equality Comparison Algorithm, стадии 7, в котором говорится о сравнении x == y:

Если Тип (у) булева, вернуть результат сравнения х == ToNumber (y).

Таким образом, правое булевское число принудительно приводится к числу с ToNumber. В этом случае, ToNumber говорит:

В результате если аргумент верно.

+1

Oh! да '1 ==! 0' дает true. –

+0

'x == ToNumber (y)' произойдет только в том случае, если x является числом, не так ли? –

+0

@AkshendraPratap: Вид. Алгоритм рекурсивный. Таким образом, 'x' может начинаться как что-то еще, но был преобразован в число на более раннем этапе. –

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