5647 Stimmen

Welcher Gleichheitsoperator (== vs ===) sollte in JavaScript-Vergleichen verwendet werden?

Ich benutze JSLint durch JavaScript zu gehen, und es werden viele Vorschläge zum Ersetzen von == (zwei Gleichheitszeichen) mit === (drei Gleichheitszeichen), wenn Sie z. B. Folgendes vergleichen idSele_UNVEHtype.value.length == 0 innerhalb eines if Erklärung.

Gibt es einen Leistungsvorteil durch den Austausch von == con === ?

Da es viele Vergleichsoperatoren gibt, wäre jede Leistungsverbesserung zu begrüßen.

Wenn keine Typkonvertierung stattfindet, gibt es dann einen Leistungsgewinn gegenüber == ?

48voto

CuongHuyTo Punkte 1283

Der gleichwertige Vergleichsoperator == ist verwirrend und sollte vermieden werden.

Wenn Sie MÜSSEN damit leben, dann denken Sie an die folgenden 3 Dinge:

  1. Sie ist nicht transitiv: (a == b) y (b == c) führt nicht zu (a == c)
  2. Seine Negation schließt sich gegenseitig aus: (a == b) y (a != b) enthalten immer entgegengesetzte boolesche Werte, wobei alle a und b.
  3. Im Zweifelsfall sollten Sie die folgende Wahrheitstabelle auswendig lernen:

GLEICHHEITSOPERATOR WAHRHEITSTABELLE IN JAVASCRIPT

  • Jede Zeile in der Tabelle besteht aus 3 "gleichen" Werten, d. h. 2 beliebige Werte sind gleich, wenn man das Gleichheitszeichen == verwendet*.

** STRANGE: Beachten Sie, dass zwei Werte in der ersten Spalte in diesem Sinne nicht gleich sind.

''       == 0 == false   // Any two values among these 3 ones are equal with the == operator
'0'      == 0 == false   // Also a set of 3 equal values, note that only 0 and false are repeated
'\t'     == 0 == false   // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
'\r'     == 0 == false   // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
'\n'     == 0 == false   // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
'\t\r\n' == 0 == false   // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

null == undefined  // These two "default" values are not-equal to any of the listed values above
NaN                // NaN is not equal to any thing, even to itself.

41voto

Amit Punkte 795

Einfach

== bedeutet Vergleich zwischen Operanden mit Typenzwang

et

=== bedeutet Vergleich zwischen Operanden ohne Typenzwang.

Type Coercion in JavaScript bedeutet die automatische Umwandlung von Datentypen in andere Datentypen.

Zum Beispiel:

123 == "123"  // Returns true, because JS coerces string "123" to number 123
              // and then goes on to compare `123 == 123`.

123 === "123" // Returns false, because JS does not coerce values of different types here.

41voto

Sean Punkte 1955

Es ist unwahrscheinlich, dass es bei Ihrer Verwendung einen Leistungsunterschied zwischen den beiden Vorgängen gibt. Es muss keine Typumwandlung vorgenommen werden, da beide Parameter bereits den gleichen Typ haben. Bei beiden Operationen wird ein Typvergleich durchgeführt, gefolgt von einem Wertevergleich.

40voto

Aniket Thakur Punkte 62911

Ja! Es ist wichtig.

=== operator in javascript prüft sowohl den Wert als auch den Typ wobei als == Operator prüft lediglich den Wert (konvertiert den Typ, falls erforderlich) .

enter image description here

Sie können es leicht testen. Fügen Sie den folgenden Code in eine HTML-Datei ein und öffnen Sie sie im Browser

<script>

function onPageLoad()
{
    var x = "5";
    var y = 5;
    alert(x === 5);
};

</script>

</head>

<body onload='onPageLoad();'>

Sie erhalten ' falso ' in Alarmbereitschaft. Ändern Sie nun die onPageLoad() Methode zu alert(x == 5); erhalten Sie wahr .

39voto

mar10 Punkte 13052

Als Faustregel würde ich im Allgemeinen Folgendes verwenden === anstelle von == (und !== anstelle von != ).

Die Gründe werden in den obigen Antworten erläutert, und auch Douglas Crockford äußert sich recht deutlich dazu ( JavaScript: Die guten Seiten ).

Allerdings gibt es eine einzige Ausnahme : == null ist ein effizienter Weg, um auf 'ist null oder undefiniert' zu prüfen:

if( value == null ){
    // value is either null or undefined
}

Zum Beispiel verwendet jQuery 1.9.1 dieses Muster 43 Mal, und die JSHint-Syntaxüberprüfung bietet sogar die eqnull aus diesem Grund eine entspannende Option.

Von der jQuery-Style-Guide :

Strenge Gleichheitsprüfungen (===) sollten zu Gunsten von == verwendet werden. Die einzige Ausnahme ist die Prüfung auf undefiniert und null durch null.

// Check for both undefined and null values, for some important reason. 
undefOrNull == null;

EDIT 2021-03:

Heutzutage die meisten Browser Unterstützung der Nullischer Koaleszenzoperator ( ?? ) und die Logische nullische Zuordnung (??=) was eine prägnantere Art und Weise ermöglicht, um einen Standardwert zuzuweisen, wenn eine Variable z. B. null oder undefiniert ist:

if (a.speed == null) {
  // Set default if null or undefined
  a.speed = 42;
}

kann in jeder der folgenden Formen geschrieben werden

a.speed ??= 42;
a.speed ?? a.speed = 42;
a.speed = a.speed ?? 42;

1 Stimmen

" == null ist ein effizienter Weg, um auf 'is' zu prüfen null o undefined '" ou document.all .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X