1UnitedPower: SUchen und ersetzen

Beitrag lesen

Meine Herren!

Es gibt (Konstruktor-)Funktionen für primitive Datentypen,

Stimmt, hab ich doch neulich auch Number() verwendet, weil die parseXXX() in dem Fall nicht anwendbar waren.

Allerdings, so erinnere ich mich, sagt auch schon Selfhtml, dass mit den Konstuktorfunktionen nicht mehr ein primitiver Wert sondern ein Objekt erstellt

Die Funktionen erstellen nur Objekte, wenn sie mit new aufgerufen werden. Das kann zu wirklich absurdem Verhalten führen:

if ( new Boolean ( false ) ) {  
   // Yep, dieser Zweig wird ausgeführt  
}  
  
if ( new Boolan ( false ) == true ) {  
   // Nope, dieser Zweig nicht  
}

Ohne new besteht diese Gefahr nicht:

if ( Boolean( false ) ) {  
   // Dieser Zweig wird auch nicht ausgeführt.  
}

Übrigens: Primitive Datentypen, die ab EcmaScript 6 eingeführt werden (zunächst Symbol), kann man nicht mehr mit new instanzieren. Aus Gründen der Abwärtskompatibilität bleibt die Möglichkeit für die bestehenden Primitiven aber bestehen.

Allerdings, so erinnere ich mich, sagt auch schon Selfhtml, dass [...] man die Konstruktorfunktionenn für die primitiven Typen zugunsten einer direkt-Notation meiden soll, also nicht ohne Grund zum Beispiel var foo = Boolean(true); sondern var foo = true; nehmen soll.

Da stimme ich nur zur Hälfte zu. Wenn man Werte hartcodieren möchte, dann bevorzugt immer in Literal-Schreibweise. Wenn es aber um die Umwandlung von Typen geht, dann bevorzuge ich zu Gunsten der Lesbarkeit explizite Typumwandlung mit Boolean(variable), Number(variable) etc. (ohne new!) vor impliziter Typumwandlung durch !!variable oder 1 * variable.

--
“All right, then, I'll go to hell.” – Huck Finn