2016-05-30 22 views
-1

Wie definiert man eine Variable nur wenn nicht definiert? Die Prüfung scheint einfach genug, aber dann der Block Teil soll wie folgt aussehen:Javascript-Variable, definieren, wenn nicht definiert

if (typeof PersonalDataForm !== "undefined") { 
    alert("foo defined!"); 
} else { 
    var foo = {}; 
} 

Nun, wenn ich meine JS weiß, wird diese var foo Anweisung in var foo am Anfang der Funktion getrennt erhalten Bereich und foo = {} innerhalb des Blocks selbst, weil JS Blockdefinitionsbereich variable Definition fehlt. Es wird also immer undefiniert sein, oder?

Ein Lauf dieses Codes beweist es (er druckt immer „foo undefined“):

var foo = {}; 

function checkFoo() { 
    if (typeof foo == "undefined") { 
     console.log("Foo undefined"); 
     var foo = "default"; 
    } else { 
     console.log("Foo defined"); 
    } 
} 
checkFoo(); 
console.log(foo); 

Ein interessanter Fall für diese mit der Deklaration einer persönlichen „Bibliothek“ sein könnte, die mit Beginn des Einsatzes:

Wenn es nicht bereits definiert ist, wird in diesem Fall ein Fehler ausgegeben.

+2

'foo = foo || "Standard"? –

+0

@ kyll was ist, wenn der Wert von foo ** falsch ist **? – xDaizu

+0

Ah, richtig. 'foo = typeof foo! == 'undefiniert'? foo: 'Standard'. Aber es wird langweilig zu lesen. Und natürlich scheitert es, wenn der Wert von "foo" nicht definiert ist. Der letzte Weg, es zu tun, könnte sein, 'foo' zu versuchen und zu verwenden, um zu sehen, ob dort ein' ReferenceError' geworfen wird, denke ich. –

Antwort

-1

Ich bin mir nicht sicher, warum Sie typeof Betreiber verwenden.

Nach dem Entfernen funktioniert es wie erwartet.

var foo = {}; 

function checkFoo(){ 

    if(foo == "undefined"){ 
     console.log("Foo undefined"); 
     var foo = "default"; 
    }else{ 
     console.log("Foo defined"); 
    } 
} 

checkFoo(); 
console.log(foo); 
+0

hast du gelesen was @Kyll geschrieben hat? –

+0

es funktioniert, weil '{}! ==" undefined "', aber wenn Sie die 'var foo = {};' Zeile entfernen, wird immer noch "foo defined" gedruckt, weil 'foo' nicht definiert ist und nicht gleich dem Zeichenfolge "undefined" https://jsfiddle.net/bLztaus8/1/ – xDaizu

Verwandte Themen