it-swarm.com.de

Wie prüft man eine nicht definierte Variable in JavaScript?

Ich wollte prüfen, ob die Variable definiert ist oder nicht. Beispielsweise wirft das Folgende einen nicht definierten Fehler aus 

alert( x );

Wie kann ich diesen Fehler feststellen?

805
Jineesh

In JavaScript ist null ein Objekt. Es gibt einen anderen Wert für Dinge, die nicht existieren, undefined. Das DOM gibt null für fast alle Fälle zurück, in denen es keine Struktur im Dokument findet. In JavaScript selbst ist undefined der verwendete Wert.

Zweitens, nein, es gibt kein direktes Äquivalent. Wenn Sie wirklich nach null suchen möchten, gehen Sie folgendermaßen vor:

if (yourvar === null) // Does not execute if yourvar is `undefined`

Wenn Sie prüfen möchten, ob eine Variable existiert, kann dies nur mit trycatch erfolgen, da typeof eine nicht deklarierte Variable und eine mit dem Wert von undefined deklarierte Variable als äquivalent behandelt.

Um jedoch zu prüfen, ob eine Variable deklariert ist, ist _/und nicht undefined:

if (typeof yourvar !== 'undefined') // Any scope

Wenn Sie wissen, dass die Variable existiert, und prüfen möchten, ob darin ein Wert gespeichert ist:

if (yourvar !== undefined)

Wenn Sie wissen möchten, ob ein Mitglied unabhängig ist, sich aber dessen Wert nicht interessiert:

if ('membername' in object) // With inheritance
if (object.hasOwnProperty('membername')) // Without inheritance

Wenn Sie wissen möchten, ob eine Variable true ist :

if (yourvar)

Quelle

1564
Natrium

Der einzige Weg, um wirklich zu testen, ob eine Variable undefined ist, besteht darin, Folgendes zu tun. Denken Sie daran, undefined ist ein Objekt in JavaScript.

if (typeof someVar === 'undefined') {
  // Your variable is undefined
}

Einige der anderen Lösungen in diesem Thread lassen Sie vermuten, dass eine Variable undefiniert ist, obwohl sie definiert wurde (beispielsweise mit dem Wert NULL oder 0).

313
Michael Wales

Technisch ist die richtige Lösung (glaube ich):

typeof x === "undefined"

Sie können manchmal faul werden und verwenden

x == null

dies ermöglicht jedoch, dass sowohl eine undefinierte Variable x als auch eine Variable x, die null enthält, true zurückgibt.

61
Jason S

Ich habe oft gemacht:

function doSomething(variable)
{
    var undef;

    if(variable === undef)
    {
         alert('Hey moron, define this bad boy.');
    }
}
14
Joe

Eine noch einfachere und kürzere Version wäre:

if (!x) {
   //Undefined
}

OR

if (typeof x !== "undefined") {
    //Do something since x is defined.
}
14
Dmitri Farkov

Sie können auch den ternären Bedingungsoperator verwenden:

var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);

//var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);

3
John

Eine andere mögliche Lösung ist die Verwendung des window-Objekts. Dadurch wird das Referenzfehlerproblem in einem Browser vermieden.

if (window.x) {
    alert('x exists and is truthy');
} else {
    alert('x does not exist, or exists and is falsy');
}
3
ubershmekel

Ich benutze oft den einfachsten Weg:

var variable;
if (variable === undefined){
    console.log('Variable is undefined');
} else {
    console.log('Variable is defined');
}

BEARBEITEN:

Ohne das Initialisieren der Variablen wird eine Ausnahme ausgelöst "Unrecept ReferenceError: Variable ist nicht definiert ..."

1
mokiSRB

Der Operator void gibt undefined für alle an ihn übergebenen Argumente/Ausdrücke zurück. So können Sie mit dem Ergebnis testen (tatsächlich ändern einige Minifier ihren Code von undefined in void 0, um ein paar Zeichen zu speichern)

Zum Beispiel:

void 0
// undefined

if (variable === void 0) {
    // variable is undefined
}
0
svarog

Wir können undefined wie folgt prüfen 

var x; 

if (x === undefined) {
    alert("x is undefined");
} else {
     alert("x is defined");
}
0
Arshid KV

Der Fehler sagt Ihnen, dass x nicht einmal existiert! Es wurde nicht deklariert , was anders ist als zugewiesen ein Wert.

var x; // declaration
x = 2; // assignment

Wenn Sie x angegeben haben, erhalten Sie keine Fehlermeldung. Sie würden eine Warnung erhalten, die undefined angibt, da x vorhanden ist/wurde, aber noch kein Wert zugewiesen wurde.

Um zu überprüfen, ob die Variable deklariert wurde, können Sie typeof verwenden. Bei jeder anderen Methode, ob eine Variable vorhanden ist, wird derselbe Fehler ausgegeben, den Sie ursprünglich erhalten haben.

if(typeof x  !==  "undefined") {
    alert(x);
}

Dies überprüft den Typ des in x gespeicherten Werts. Es wird nur undefined zurückgegeben, wenn x nicht deklariert wurde OR, wenn deklariert wurde und noch nicht zugewiesen wurde.

0
JBallin

Ich verwende eine kleine Funktion, um zu überprüfen, ob eine Variable deklariert wurde, was die Menge an Durcheinander in meinen Javascript-Dateien wirklich verringert. Ich füge eine Überprüfung für den Wert hinzu, um sicherzustellen, dass die Variable nicht nur existiert, sondern auch ein Wert zugewiesen wurde. Die zweite Bedingung prüft, ob die Variable auch instanziiert wurde. Wenn die Variable zwar definiert, aber nicht instanziiert wurde (siehe Beispiel unten), wird immer noch ein Fehler ausgegeben, wenn Sie versuchen, auf ihren Wert im Code zu verweisen. 

Nicht instanziiert - var my_variable; instanziiert - var my_variable = ""; 

function varExists(el) { 
  if ( typeof el !== "undefined" && typeof el.val() !== "undefined" ) { 
    return true; 
  } else { 
    return false; 
  } 
}

Sie können dann eine Bedingungsanweisung verwenden, um zu testen, ob die Variable sowohl definiert als auch instanziiert wurde ...

if ( varExists(variable_name) ) { // checks that it DOES exist } 

oder um zu testen, dass es nicht definiert und instanziiert wurde ...

if( !varExists(variable_name) ) { // checks that it DOESN'T exist }
0
MistyDawn

Mach einfach so etwas wie folgt:

function isNotDefined(value) {
  return typeof value === "undefined";
}

und nennen Sie es wie:

isNotDefined(undefined); //return true
isNotDefined('Alireza'); //return false
0
Alireza

Die akzeptierte Antwort ist richtig. Ich wollte nur noch eine Option hinzufügen. Sie können auch try ... catch block verwenden, um diese Situation zu behandeln. Ein verrücktes Beispiel:

var a;
try {
    a = b + 1;  // throws ReferenceError if b is not defined
} 
catch (e) {
    a = 1;      // apply some default behavior in case of error
}
finally {
    a = a || 0; // normalize the result in any case
}

Beachten Sie den catch-Block, der etwas unordentlich ist, da er einen Bereich auf Blockebene erstellt. Und natürlich ist das Beispiel für die Beantwortung der gestellten Frage extrem vereinfacht, es werden nicht die besten Vorgehensweisen bei der Fehlerbehandlung behandelt;).