2015-10-27 12 views
5

Credo di conoscere le differenze tra == e === in JavaScript, è che == eseguirà la coercizione di tipo quando comparirà ma === non lo farà. Comprendo che il seguente codice sarà vero:type coercion in JavaScript

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

ma quando il codice di seguito è falso?

+2

Solo un altro motivo per non toccare '==' con un palo da 90 piedi! – Scott

+0

@ScottKaye Lo uso sempre senza problemi, ma evito di confrontare oggetti di diverso tipo. – Barmar

risposta

4

Quando si confronta vagamente un valore booleano con un valore di un altro tipo, il valore booleano viene convertito in un numero.

E quando si confronta un numero e una stringa, la stringa viene convertita in un numero.

Le regole complete sono spiegate in The Abstract Equality Comparison Algorithm

Il processo è simile:

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

> * il numero è forzato in un numero *? –

+0

'true' diventa' 1', non '0'. – Barmar

+0

Questo è sbagliato, perché questo è alzato? – Phil

1

L'operando booleano viene convertito in un valore numerico e archi vengono convertiti in un valore numerico da un operando è un numero.

Finiamo con 1 == NaN. Se uno degli operandi è NaN, l'operatore uguale restituisce sempre false.