2010-01-25 4 views
17

Wie Which equals operator (== vs ===) should be used in JavaScript comparisons? angibt, sind sie im Grunde identisch mit Ausnahme von '===' auch gewährleistet Typ Gleichheit und damit '==' könnte Typ Umwandlung durchführen. In Douglas Crockfords JavaScript: Die guten Teile, es wird empfohlen, immer '==' zu vermeiden. Ich frage mich jedoch, was der ursprüngliche Gedanke war, zwei Gleichheitsoperatoren zu entwerfen.Wann würde JavaScript == mehr Sinn machen als ===?

Haben Sie irgendeine Situation gesehen, in der die Verwendung von '==' tatsächlich besser geeignet ist als die Verwendung von '==='?

Antwort

17

Betrachten wir eine Situation, wenn Sie vergleichen Zahlen oder Strings haben kann: ein

if (4 === 4) 
{ 
    // true 
} 

aber

if (4 == "4") 
{ 
    // true 
} 

nd

if (4 === "4") 
{ 
    // false 
} 

Dies gilt sowohl für Objekte als auch für Arrays.

So in diesen Fällen müssen Sie vernünftige Wahl treffen, ob == oder === verwenden

+0

Ich frage nicht den Unterschied zwischen den beiden, die in 359494 beantwortet wird. Ich bin interessiert zu wissen, wann '==' besonders geeignet wäre. – bryantsai

+5

@bryantsai: Er gab Ihnen das - Strings mit Zahlen zu vergleichen, ohne manuell 'ParseInt' zu verwenden. – Anonymous

+0

mm .. habe das nicht wirklich erkannt, danke. – bryantsai

0

== vergleicht, ob der Wert der 2 Seiten identisch sind oder nicht.

=== vergleicht, ob der Wert und der Datentyp der beiden Seiten identisch sind oder nicht.

Sagen wir

$var = 0; 

if($var == false){ 
    // true because 0 is also read as false 
} 

if(!$var){ 
    // true because 0 is also read as false 
} 

if($var === false){ 
    // false because 0 is not the same datatype as false. (int vs bool) 
} 

if($var !== false){ 
    // true becuase 0 is not the same datatype as false. (int vs bool) 
} 

if($var === 0){ 
    // true, the value and datatype are the same. 
} 

Sie überprüfen http://www.jonlee.ca/the-triple-equals-in-php/

+3

-1 Es geht um JavaScript und nicht PHP. – Gumbo

3

Ich würde vorschlagen, dass es kein Problem bei der Verwendung == ist, sondern zu verstehen, wann und warum es zu benutzen (dh verwenden Sie in der Regel ===, und ==, wenn es einen Zweck erfüllt). Im Wesentlichen == gibt Ihnen nur Kurzschreibweise - (! Vble) statt

so etwas wie tun
if (vble === 0 || vble === "" || vble === null || vble === undefined || vble === false) ... 

Es ist viel einfacher, nur

if (vble == false) ... 

schreiben (Oder noch einfacher zu schreiben)

wenn ...

Natürlich gibt es mehr Beispiele als nur nach "truthy" oder "falsey" Werten zu suchen.

Wirklich, Sie brauchen nur zu verstehen, wann und warum == und === zu verwenden, ich keinen Grund, warum nicht == zu verwenden, wo es besser paßt ...

Ein weiteres Beispiel diese Stenografie verwendet zu erlauben verkürztes Verfahren nennt:

function func(boolOptionNotCommonlyUsed) { 
    if (boolOptionNotCommonlyUsed) { //equiv to boolOptionNotCommonlyUsed == true 
    //do something we rarely do 
    } 
    //do whatever func usually does 
} 

func(); //we rarely use boolOptionNotCommonlyUsed, so allow calling without "false" as an arg 
5

Die einfache Antwort ist, dass ‚==‘, wenn mehr Sinn als ‚===‘ macht Sie Art Zwang während Vergleiche geschehen soll.

Ein gutes Beispiel wären Zahlen, die in einer URL-Abfragezeichenfolge übergeben werden. Wenn Sie beispielsweise paginierten Inhalt haben und der Abfrageparameter page die aktuelle Seitennummer enthält, können Sie mit if (page == 1) ... nach der aktuellen Seite suchen, obwohl page eigentlich "1" ist, nicht 1.

Verwandte Themen