2015-10-27 2 views
5

Я предполагаю, что я знаю различия между == и === в JavaScript, это то, что == будет делать принуждение типа при сравнении, но === не будет. Я понимаю, что следующий код будет правдой:Тип принуждения в JavaScript

console.log(true == "1"); 

но когда код ниже является ложным?

console.log(true == "true"); 
+2

Еще одна причина не трогать '==' с полюсом на 90 футов! – Scott

+0

@ScottKaye Я использую его все время без проблем, но избегаю сравнения объектов разных типов. – Barmar

ответ

4

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

И когда вы сравниваете число и строку, строка принудительно вводится в число.

ПОЛНАЯ правила объясняются в The Abstract Equality Comparison Algorithm

Процесс выглядит так:

true == "true" ─┐ 
       ├─ Number(true) // 1 
1 == "true" ─┤ 
       ├─ Number("true") // NaN 
1 == NaN ─┤ 
       ├─ // Comparing with `NaN` always produces `false` 
    false  ─┘ 
+0

> * номер принудительно введен в число *? –

+0

'true' становится' 1', а не '0'. – Barmar

+0

Это неправильно, почему это так? – Phil

1

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

В итоге мы получаем 1 == NaN. Если любой из операндов равен NaN, равный оператор всегда возвращает false.

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