Veroderung mit Leermenge bei Initialisierung

kuhlmaehn

Erfahrenes Mitglied
Hi,
ich hab das jetzt schon öfter gesehen aber der Sinn bleibt mir verschlossen und gefunden habe ich dazu auch nichts.
Was ist Sinn, wenn man eine Variable wie folgt definiert:
Code:
var test = test || {};
Bzw. wieso funktioniert das überhaupt?
Danke!
 
Das || ist das oder ,

var test = test /* sofern test definiert ist */ oder {} /* ein leeres Objekt */

also var test bekommt dann entweder den wert von test bzw referenziert darauf oder ist ein leeres Objekt. Gesetzt wird es so oder so dann.

Kannst auch für Event Callback Funktionen nutzen um das Event Objekt zu speichern

Code:
/**
 * der IE wird den Parameter evt nicht kennen und weicht dann auf window.event aus
 * so das in der variable e dann der wert von window.event steht. Alle anderen Browser kennen 
 * evt und belegen e mit dem Wert vom Parameter evt
 */
function callbackEvent( evt ) {
    var e = evt || window.event
}
 
Müsste es dann nicht wie folgt heißen:

var test = (test ? test : {});

Oder irre ich mich?
Mh dann wäre es auf jeden Fall deutlicher...

Das das "oder" ist war mir soweit klar doch ich dachte es wäre nur ein logisches, welches in Schleifen verwendet werden kann? Test müsste doch dann eigentlich auch ein bool sein oder?
Das test hinter dem gleich ist auch nicht irgendwo anders definiert. Damit kann doch aber auch nicht das "test" links vom gleich gemeint sein, da dieses ja erst gerade initialisiert wird!? "Den Wert von test" kann es so doch noch gar nicht geben?
Ich versteh es nicht :)
Danke!
 
Ja die Kurzschreibweise von if else wäre in dem Falle ( bedingung ) ? wahr : falsch

Bei dem test || {} prüft der nicht ob test boolean true ist, sondern ob da irgendwas drinnen steht was nicht null, 0 , false (ob da nun undefined auch zu zählt keine Ahnung) ist wenn dem aber doch der Fall sein sollte dann weiche auf das aus was hinter dem || steht.
Also das oder das ;)
Das andere wäre wenn Bedingung == true dann tu dies , ansonsten das.

In machen Fällen wäre die ( bedingung ) ? wahr : falsch natürlich besser besonders dann wenn man prüfen möchte ob ein Wert nun den Integer 0 hat.

Der einzigste Vorteil in der Schreibweise hier liegt halt darin das es einfach kürzer ist, die if else kurzform kann noch beliebig erweitert werden und ist somit exakter.

zu der Variable test sei gesagt
Code:
function  foobar ( test ) {
   alert ( test ) 

/* erst hier wird die Parameter Variable test überschrieben 
*  sollte sie nicht gesetzt sein bekommt die lokale Variable test den Wert Rudolf zugewiesen 
*  ansonsten eben den Wert von der Parameter Variable test somit kannst halt sicherstellen 
* das test auf jeden Fall gesetzt ist.
* 
* das ginge natürlich auch
* var test = ( test ) ? test : "Rudolf";
*/
   var test = test || "Rudolf";

   alert ( test ) ;
}

foobar("klaus"); // wird 2 mal klaus aufrufen
foobar();          // beim 1. mal null und beim 2. alert dann Rudolf
 
Zuletzt bearbeitet:
Hi,

JavaScript hat eine automatische Typenumwandlung implementiert. Diese hat zur Folge, dass "undefined" (=primitiver Typ) den Wert false zugewiesen bekommt, sollte es in einen booleschen Datentyp konvertiert werden müssen.

Nachzulesen in Standard ECMA-262 (Kapitel 9 und 9.2).


Ciao
Quaese
 
Zurück