2014-08-28 13 views
6

I seguenti restituiscono true:Perché nuovo numero (2) = new String ("2") in JavaScript

new Number(2) == 2 
new String("2") == "2" 

Ovviamente, ma in modo da effettuare le seguenti operazioni:

"2" == 2 
new Number(2) == "2" 
new String("2") == 2 

Così qualcuno può spiegare chiaramente perché dopo aver valutato false?

new Number(2) == new String("2") 
+0

Il tipo implicito coercian spiega il "2" == 2 esempi – dougajmcdonald

+0

@dougajmcdonald: No. –

+2

Hai creato due oggetti e stai provando a confrontarli. In questo caso, '==' confronterà i riferimenti piuttosto che la conversione del tipo di uso. Vedi: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Equality_(.3D.3D) – birryree

risposta

6

Poiché JavaScript ha sia oggetto primitivo e versioni di numeri e stringhe (e booleani). new Number e new String creare oggetto versioni e quando si utilizza == con riferimenti a oggetti, si stanno confrontando riferimenti a oggetti, non valori.

new String(x) e String(x) sono fondamentalmente cose diverse (e questo è vero anche con Number). Con l'operatore new, stai creando un oggetto. Senza l'operatore new, si esegue la coercizione di tipo   — ad es. String(2) ti dà "2" e Number("2") ti dà 2.

+0

Ahh, quindi 'new String (" 2 ") == new String (" 2 ")' è 'false' insieme a' new Number (2) == new Number (2) ' – jaypeagi

+0

@jaypeagi: Sì. :-) –

+1

Grazie, titolo corretto! – jaypeagi

1

Quello che penso == è fondamentalmente il confronto dei valori.

In tutte le situazioni, si confrontano solo i valori. Ma in questo

new Number(2) == new String("2") 

Entrambi sono oggetti quindi non confronta i valori, prova a confrontare i valori dei riferimenti oggetto. Ecco perché restituisce false.

+0

Per essere più precisi: sta ancora confrontando i valori. I valori confrontati sono riferimenti a oggetti. –

+0

@ T.J.Crowder Ahhh .. Vedo aggiornato la mia risposta. – Mritunjay

1

Basta provare:

new Number(2) == new Number(2) 

che restituisce

falsa

e si avrà la risposta: ci sono 2 diversi oggetti che dispongono di 2 riferimenti diversi.

Problemi correlati