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 == ?

34voto

Daniel Punkte 870

Es ist eine strenge Prüfung.

Das ist eine gute Sache, besonders wenn man zwischen 0 und false und null prüft.

Zum Beispiel, wenn Sie haben:

$a = 0;

Dann:

$a==0; 
$a==NULL;
$a==false;

Alle Ergebnisse sind wahr, und das wollen Sie vielleicht nicht. Nehmen wir an, Sie haben eine Funktion, die den 0. Index eines Arrays oder im Fehlerfall false zurückgeben kann. Wenn Sie mit "==" false prüfen, können Sie ein verwirrendes Ergebnis erhalten.

Also mit der gleichen Sache wie oben, aber einem strengen Test:

$a = 0;

$a===0; // returns true
$a===NULL; // returns false
$a===false; // returns false

3 Stimmen

In JavaScript ist dies völlig falsch und zu Unrecht unvollständig. 0 != null . -1

34voto

Niraj CHoubey Punkte 457

=== Operator prüft sowohl die Werte als auch die Typen der Variablen auf Gleichheit.

== Operator prüft lediglich den Wert der Variablen auf Gleichheit.

33voto

ashes Punkte 611

JSLint gibt Ihnen manchmal unrealistische Gründe, etwas zu ändern. === hat genau die gleiche Leistung wie == wenn die Typen bereits identisch sind.

Es ist nur dann schneller, wenn die Typen nicht gleich sind. In diesem Fall wird nicht versucht, die Typen zu konvertieren, sondern es wird direkt ein false zurückgegeben.

Also, IMHO, JSLint kann verwendet werden, um neuen Code zu schreiben, aber eine unnötige Überoptimierung sollte um jeden Preis vermieden werden.

Das bedeutet, dass es keinen Grund gibt, die == a === in einem Scheck wie if (a == 'test') wenn Sie genau wissen, dass a nur ein String sein kann.

Wenn man auf diese Weise eine Menge Code ändert, verschwendet man die Zeit der Entwickler und Prüfer und erreicht nichts.

0 Stimmen

Interessanterweise, a.length===4 ist eigentlich Langsamer in Firefox als a.length==4 . Es ist auf jeden Fall eine Mikro-Optimierung, aber das steht im Gegensatz zu dem, was die Leute behaupten.

29voto

Vikas Punkte 4141

Ein einfaches Beispiel ist

2 == '2'  -> true, values are SAME because of type conversion.

2 === '2'  -> false, values are NOT SAME because of no type conversion.

26voto

Harry He Punkte 1655

Die ersten 2 Antworten erwähnten beide == bedeutet Gleichheit und === bedeutet Identität. Leider ist diese Aussage falsch.

Wenn beide Operanden von == Objekte sind, werden sie verglichen, um festzustellen, ob sie dasselbe Objekt sind. Wenn beide Operanden auf dasselbe Objekt verweisen, gibt der Gleichheitsoperator true zurück. Andernfalls, sind die beiden nicht gleich.

var a = [1, 2, 3];  
var b = [1, 2, 3];  
console.log(a == b)  // false  
console.log(a === b) // false  

Im obigen Code werden sowohl == als auch === falsch, weil a und b nicht dieselben Objekte sind.

Das heißt: Wenn beide Operanden von == Objekte sind, verhält sich == genauso wie ===, was ebenfalls Identität bedeutet. Der wesentliche Unterschied zwischen diesen beiden Operatoren besteht in der Typkonvertierung. == hat eine Konvertierung, bevor es die Gleichheit prüft, aber === nicht.

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