2013-07-10 11 views
5

Qualcuno può spiegare perché questi confronti di disuguaglianza tra array JavaScript valgono per vero?Uguaglianza/disuguaglianza di array

[""] !== [""] 

[1] !== [1] 

[] !== [] 


[""] != [""] 

[1] != [1] 

[] != [] 
+2

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators –

+0

@GeorgeCummins Beh, sarebbe lo stesso nella maggior parte delle lingue. –

+1

myHouse e yourHouse sono entrambe case ma myHouse! == yourHouse -> true – Xotic750

risposta

8

=== è rigorosa uguaglianza.
Quando si confrontano oggetti, restituirà true solo se entrambi i lati si riferiscono allo stesso oggetto.

[] e [] sono due oggetti diversi (sebbene equivalenti), pertanto restituiscono false.


== equivale all'uguaglianza.

Provvederà a forzare entrambi gli operandi allo stesso tipo, come descritto nello spec.

Tuttavia, confronta anche gli oggetti per identità referenziale.

+0

Si noti che il confronto di stringhe letterali restituisce true ("a" === "a"), ma il confronto tra gli oggetti String produce false: new String ("a ") === nuova stringa (" a "). Concludo quindi che i letterali delle stringhe non vengono trattati come oggetti e "internati" in modo simile al linguaggio Java. –

+1

@normc: No. A differenza di Java, Javascript ha una stringa _primitive_ type, proprio come i numeri. 'new String (" a ")' lo inserisce in un oggetto. Ad esempio, 'var a =" a "; a.b = 2; alert (a.b); // undefined' – SLaks

+0

@normc: Gli oggetti stringa box non vengono quasi mai utilizzati; tutte le operazioni con le stringhe restituiscono le primitive. – SLaks

Problemi correlati