Zunächst die Fakten:
if (booleanValue)
if
Erfüllt die Aussage für jeden wahrheitsgemäßen Wert, booleanValue
einschließlich true
einer Zahl ungleich Null, eines nicht leeren Zeichenfolgenwerts, einer Objekt- oder Arrayreferenz usw.
Andererseits:
if (booleanValue === true)
Dies erfüllt die if
Bedingung nur, wenn sie booleanValue
genau gleich ist true
. Kein anderer wahrer Wert wird es befriedigen.
Auf der anderen Seite, wenn Sie dies tun:
if (someVar == true)
Anschließend gibt Javascript den Befehl coerce ein true
, um ihn an den Typ anzupassen , someVar
und vergleicht dann die beiden Variablen. Es gibt viele Situationen, in denen dies wahrscheinlich nicht das ist, was man beabsichtigen würde. Aus diesem Grund möchten Sie in den meisten Fällen vermeiden, ==
dass es ziemlich viele Regeln gibt, wie Javascript zwei Dinge zum gleichen Typ zwingt, und es sei denn, Sie verstehen alle diese Regeln und können alles vorhersehen, was der JS-Interpreter wann tun könnte Angesichts von zwei verschiedenen Typen (die die meisten JS-Entwickler nicht können) möchten Sie wahrscheinlich ==
ganz vermeiden .
Als Beispiel dafür, wie verwirrend es sein kann:
var x;
x = 0;
console.log(x == true); // false, as expected
console.log(x == false); // true as expected
x = 1;
console.log(x == true); // true, as expected
console.log(x == false); // false as expected
x = 2;
console.log(x == true); // false, ??
console.log(x == false); // false
Für den Wert 2
würde man denken, dass dies 2
ein wahrer Wert ist, also würde er sich positiv mit dem vergleichen true
, aber so funktioniert der Typenzwang nicht. Es konvertiert den Wert für die rechte Hand so, dass er mit dem Typ des Werts für die linke Hand übereinstimmt, sodass er true
in die Zahl konvertiert wird , 1
damit verglichen wird, 2 == 1
was sicherlich nicht das ist, was Sie wahrscheinlich beabsichtigt haben.
Also, Käufer aufgepasst. Es ist wahrscheinlich am besten, ==
in fast allen Fällen zu vermeiden, es sei denn, Sie kennen explizit die Typen, die Sie vergleichen werden, und wissen, wie alle möglichen Typen von Zwangsalgorithmen funktionieren.
Es hängt also wirklich von den erwarteten Werten ab booleanValue
und davon, wie der Code funktionieren soll. Wenn Sie im Voraus wissen, dass es immer nur einen true
oder false
Wert haben wird, vergleichen Sie ihn explizit mit
if (booleanValue === true)
ist nur extra code und unnötig und
if (booleanValue)
ist kompakter und wohl sauberer / besser.
Wenn Sie andererseits nicht wissen, was sein booleanValue
könnte, und Sie testen möchten, ob es wirklich so eingestellt ist, dass true
keine anderen automatischen Typkonvertierungen zulässig sind, dann
if (booleanValue === true)
ist nicht nur eine gute Idee, sondern erforderlich.
Wenn Sie sich beispielsweise die Implementierung von .on()
in jQuery ansehen , hat sie einen optionalen Rückgabewert. Wenn der Rückruf zurückkehrt false
, stoppt jQuery automatisch die Weitergabe des Ereignisses. In diesem speziellen Fall false
überprüfen sie , da jQuery die Weitergabe NUR stoppen möchte, wenn sie zurückgegeben wurde, die Rückgabe des Rückgabewerts, === false
weil sie nicht möchten undefined
oder 0
oder ""
oder irgendetwas anderes, das automatisch in false konvertiert, um auch den Vergleich zu erfüllen.
Hier ist beispielsweise der Rückrufcode für das jQuery-Ereignis:
ret = ( specialHandle || handleObj.handler ).apply( matched.elem, args );
if ( ret !== undefined ) {
event.result = ret;
if ( ret === false ) {
event.preventDefault();
event.stopPropagation();
}
}
Sie können sehen, dass jQuery explizit sucht ret === false
.
Es gibt aber auch viele andere Stellen im jQuery-Code, an denen eine einfachere Überprüfung angebracht ist, wenn der Code dies wünscht. Beispielsweise:
// The DOM ready check for Internet Explorer
function doScrollCheck() {
if ( jQuery.isReady ) {
return;
}
...