it-swarm.com.de

Was ist der Zweck von new Boolean () in Javascript?

Wozu benutzt man:

var flag = new Boolean(false); 

verglichen mit:

var flag = false;

Wann würden Sie eigentlich new Boolean verwenden?

53
zeroin23

Die globale Funktion Boolean() kann für das Type Casting verwendet werden, wenn sie ohne new aufgerufen wird, z

var foo = Boolean(bar); // equivalent to `var foo = !!bar`

Beim Aufruf mit new wird zusätzlich ein Wrapper-Objekt erstellt, dh Sie können dem Objekt beliebige Eigenschaften zuweisen:

var foo = new Boolean(bar); // equivalent to `var foo = Object(Boolean(bar));`
foo.baz = 'quux';
alert(foo.baz);

Dies ist bei primitiven Werten nicht möglich, da Primitive keine Eigenschaften enthalten können:

var foo = true;
foo.baz = 'quux';
alert(foo.baz); // `foo.baz` is `undefined`

Das Zuweisen einer Eigenschaft zu einem Grundelement führt aufgrund von Auto-Boxing nicht zu einem Fehler, d

foo.baz = 'quux';

wird als interpretiert

// create and immediately discard a wrapper object:
(new Boolean(foo)).baz = 'quux';

Um den primitiven Wert zurückzubekommen, müssen Sie die valueOf()-Methode aufrufen. Dies ist erforderlich, wenn Sie den umschlossenen Wert tatsächlich verwenden möchten, da Objekte in booleschen Kontexten immer true auswerten, selbst wenn der umschriebene Wert false ist.

Ich bin nie auf eine nützliche Anwendung gestoßen, in der ich boolesche Eigenschaften zuweisen kann, aber Boxen kann in Fällen nützlich sein, in denen ein Verweis auf einen primitiven Wert benötigt wird.

61
Christoph

Während andere die Theorie angesprochen haben, lassen Sie mich über den praktischen Teil sprechen:

Da Boolean-Objekte (als Objekte im Allgemeinen) immer wahrheitsgemäß sind, wird es als schlechte Praxis betrachtet, sie zu verwenden. In vielen Jahren der JS-Programmierung habe ich sie nie benutzt, und ich kann mich nicht erinnern, Booleans im Code anderer Leute gesehen zu haben. Nicht ein einziges Mal.

Die Verwendung primitiver Werte vermeidet Verwirrung und macht Ihren Code etwas kürzer.

Wenn Sie jemals ein in ein Objekt gehülltes Bool benötigen, können Sie auch ein Object-Objekt wie folgt verwenden:

foo = { value: false };

Das Aufrufen des Boolean()-Konstruktors als Funktion (wie in foo = Boolean(bar)) hat dieselbe Wirkung wie die explizite Typumwandlung mithilfe von !!. Letzteres wird im Allgemeinen dem ersteren vorgezogen.

19

Die boolesche Klasse rockt. Anstelle dieses Spaghetti-Codes ????:

if (foo===true) this.launch();
else this.dontLaunch();

Sie können tun, was jeder großartige Programmierer tun würde, und den Prototyp erweitern!

Boolean.prototype.ifTrue=function(ifFunc,elseFunc){
    if (this.valueOf()===true) ifFunc(); 
    else elseFunc();
}
var foo=new Boolean(/*expression*/);
foo.ifTrue(this.launch.bind(this),this.dontLaunch.bind(this));

Viel besser jetzt. 

3
Nick Manning

Vor der obigen Frage zuerst die boolesche Funktion, Boolean ()

Boolean(10 > 4) // return true
Boolean(4 > 9) // return false

Weiter: Alles mit echtem Wert wird wahr zurückgegeben. Z.B

100
-4
4.4
"hello"
"false" // note even the string value false return true.

alles ohne echten Wert zurückgeben falsch z 

NaN 
var x = 10 / "H"; // Boolean(x); return false.
undefined
"" 
0
-0
false 
null

Das Boolean-Objekt ist jetzt ein Objektwrapper für einen booleschen Wert. Der als erster Parameter übergebene Wert wird ggf. in einen booleschen Wert konvertiert. Wenn value nicht angegeben wird oder 0, -0, null, false, NaN, undefined oder die leere Zeichenfolge ("") ist, hat das Objekt den Anfangswert false. Alle anderen Werte, einschließlich aller Objekte oder der Zeichenfolge "false", erstellen ein Objekt mit dem Anfangswert "true".

Dies ermöglicht sehr mächtige Tricks.

0
Lawrence Oputa