2014-12-31 6 views
6
deletemode = new Boolean(false); 

if(deletemode) alert("TRUE"); else alert("FALSE"); 

alert(deletemode); 

Ich hatte gehofft, Fehlalarm, um zu sehen, aber ich bin TRUE Alarmerstellen JavaScript boolean Variable

da ich gelesen MDN und lesen

deletemode = new Boolean(true); 

, dass die Art und Weise ist eine falsche boolean Variable zu erstellen

Aber wenn ich die Anweisungen oben ausführen, sehe ich "TRUE" und dann in der zweiten Warnung sehe ich falsch.

Wenn ich dies tun tut es, was ich erwarten, dass es tun

if(deletemode===false) 

Ist

if(deletemode) 

eine JavaScript-Syntax-Fehler?

+0

Das ist sieht aus wie ein erwartetes Verhalten nach MDN. Siehe das erste Codebeispiel dort. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean – Gohn67

+2

In meinem Browser wird 'deletemode === false' zu' false', nicht 'true' ausgewertet. – Alnitak

+0

@Alnitak Ich denke, er spricht über den Fall 'if (deletemode)' '' 'true' zurück, was das erwartete Verhalten zu sein scheint. – Gohn67

Antwort

7

Der Grund dafür ist, dass new Boolean(false) ein Objekt zurückgibt. In JS werden alle Objekte zu einem truthy Wert ausgewertet. Dies ist der Grund, warum Ihr Test 'TRUE' alarmiert hat, da das 'if'-Konstrukt einfach überprüft, ob der Ausdruck truthy ist.

Außerdem sollten Sie nie einen booleschen Wert mit der booleschen Konstruktorfunktion erstellen. Verwenden Sie stattdessen einfach die Literalwerte true oder false.

+0

true false sind diese Zeichenfolgenwerte? –

+1

Nein, wahr und falsch sind literale boolesche Werte. Die Zeichenfolgen "true" und "false" sind Zeichenfolgenwerte. – wmock

3

Der === strenge Gleichheitsoperator gibt false zurück, da das Objekt und das boolesche Literal nicht genau gleich sind. In der Tat, kehrt auch das falsch, weil die beiden neu erstellte Objekte nicht das gleiche Objekt sind:

new Boolean(true) === new Boolean(true) // is false 

jedoch ein deletemode == false Test true zurückkehren, weil es die .valueOf() Methode für das Objekt aufrufen wird und den Wert erhalten false , die daher korrekt gleich false vergleicht.

Die alert() Funktion ruft immer .toString() auf seine Parameter, also auch [Object object]false anstelle der Standard-Anzeige.

1

Ich denke, dass Sie einige Antworten in dem folgenden Link finden können. Die kurze Antwort: Wenn Sie den neuen Boolean() -Konstruktor verwenden, wird ein Wrapper um Ihren Wert erstellt, sodass beim Aufrufen der Variablen immer true zurückgegeben wird. Wenn Sie nur Wahr/Falsch speichern möchten, ohne zusätzliche Funktionen oder Logik für die Variable, die den Wert enthält, sollten Sie sie wahrscheinlich einfach direkt zuweisen. dh var deletemode = false

What is the purpose of new Boolean() in Javascript?

Verwandte Themen