2012-08-08 9 views
9

Ich versuche, eine wiederverwendbare Funktion zu erstellen, die überprüft, ob eine Variable nicht definiert ist oder nicht. Das Seltsame ist, dass es nicht funktioniert, wenn ich die Variable an die Funktion übergebe, um den Code auszuführen, aber wenn ich dieselbe Logik außerhalb der Funktion verwende, funktioniert es. Gibt es eine Möglichkeit, diese Funktion isDefined arbeiten zu lassen?Fehler beim Übergeben undefinierter Variable zur Funktion?

//THIS WORKS AND RETURN FALSE 
alert(typeof sdfsdfsdfsdf !== 'undefined'); 

//THIS GIVES AN ERROR, WHY? 
//Uncaught ReferenceError: sdfsd is not defined 
function isDefined(value) { 
     alert(typeof value !== 'undefined' && value !== null) 
} 

isDefined(sdfsd); 

Live-Beispiel hier (überprüfen Sie die Konsole für Fehler): http://jsfiddle.net/JzJHc/

+0

Sie können dies nicht tun. Wie können Sie es in Ihre Funktion bringen, es zu testen, wenn es nicht existiert? Auch das: 'typeof value! == 'undefined' && wert! == null 'ist furchtbar unnötig. Wenn Sie einen 'null' oder' undefinierten' Test haben wollen, tun Sie einfach 'value == null'. Es erfüllt dasselbe. –

Antwort

10

Sie keine Variable verwenden können, die nicht deklariert wurde, es sei denn, es in einem typeof Test ist

Wenn Sie zu passieren versuchen eine Variable, die nicht zu einer Funktion deklariert wurde, die diese nicht deklarierte Variable verwendet. Sie werden bemerken, dass der Fehler in der Anrufer ist, nicht innerhalb isDefined

Sie müssen die Prüfung für

if (typeof sdsdsd !== 'undefined') 

ausführen, bevor Sie es in die Funktion übergeben. Grundsätzlich bedeutet das, kann nicht schreiben Sie eine isDefined Funktion, die nicht deklarierte Variablen akzeptiert. Ihre Funktion kann nur für undefinierte Eigenschaften funktionieren (die in Ordnung sind)

Allerdings bin ich neugierig, was ist der reale Fall, wo Sie eine Variable übergeben, die nicht existiert? Sie sollten alle Ihre Variablen deklarieren und sie sollten bereits existieren. Hättest du var sdsdsds erklärt, würde es mit dem Wert von undefined existieren und deine isDefined Funktion würde gerade gut arbeiten.

+0

+1 * vor allem * für den letzten Absatz. –

+0

In der Tat hat mich dein letzter Absatz dazu veranlasst, die Dinge eleganter zu gestalten. Mein Szenario besteht darin, dass eine Variable über eine MVC-Ansicht gerendert wird. Die Ansicht hat jedoch eine Bedingung, sie nicht zu rendern, wenn zu der Anforderung keine Ergebnisse vorliegen. Also initialisiert Javascript (aus einer anderen Sicht), ob dieses Objekt existiert oder nicht, um eine Aktion auszuführen. Du hast also recht, ich sollte die Variable außerhalb der MVC-Bedingung deklarieren. Danke für den Hinweis! – TruMan1

+0

Ein weiterer Fall, in dem Sie eine Variable verwenden können, die nicht deklariert ist, ist * delete *. – zsong

Verwandte Themen