Ich wollte überprüfen, ob die Variable definiert ist oder nicht. Im Folgenden wird beispielsweise ein nicht definierter Fehler ausgegeben
alert( x );
Wie kann ich diesen Fehler abfangen?
Ich wollte überprüfen, ob die Variable definiert ist oder nicht. Im Folgenden wird beispielsweise ein nicht definierter Fehler ausgegeben
alert( x );
Wie kann ich diesen Fehler abfangen?
Antworten:
In JavaScript null
ist ein Objekt. Es gibt einen anderen Wert für Dinge, die es nicht gibt undefined
. Das DOM gibt null
in fast allen Fällen zurück, in denen es keine Struktur im Dokument findet, aber in JavaScript selbst undefined
wird der Wert verwendet.
Zweitens, nein, es gibt kein direktes Äquivalent. Wenn Sie wirklich speziell nach suchen möchten, gehen Sie wie folgt vor null
:
if (yourvar === null) // Does not execute if yourvar is `undefined`
Wenn Sie überprüfen möchten, ob eine Variable vorhanden ist, können Sie dies nur mit try
/ tun catch
, da typeof
eine nicht deklarierte Variable und eine mit dem Wert deklarierte Variable undefined
als äquivalent behandelt werden.
Um zu überprüfen, ob eine Variable deklariert ist und nicht undefined
:
if (yourvar !== undefined) // Any scope
Bisher musste der typeof
Operator verwendet werden, um sicher nach undefiniert zu suchen, da eine Neuzuweisung undefined
wie bei einer Variablen möglich war. Der alte Weg sah so aus:
if (typeof yourvar !== 'undefined') // Any scope
Das Problem der undefined
Neuzuweisung wurde in ECMAScript 5 behoben, das 2009 veröffentlicht wurde. Sie können es jetzt sicher verwenden ===
und !==
testen, undefined
ohne es zu verwenden, typeof
da undefined
es seit einiger Zeit schreibgeschützt ist.
Wenn Sie wissen möchten, ob ein Mitglied unabhängig existiert, sich aber nicht darum kümmern, welchen Wert es hat:
if ('membername' in object) // With inheritance
if (object.hasOwnProperty('membername')) // Without inheritance
Wenn Sie wissen möchten, ob eine Variable wahr ist :
if (yourvar)
typeof
Operator ( typeof null == 'object'
) der Schuldige dieses Missverständnisses . Der null
Wert ist ein primitiver Wert , der der einzige Wert vom Typ Null ist .
Der einzige Weg, um wirklich zu testen, ob eine Variable besteht, undefined
besteht darin, Folgendes zu tun. Denken Sie daran, undefiniert ist ein Objekt in JavaScript.
if (typeof someVar === 'undefined') {
// Your variable is undefined
}
Einige der anderen Lösungen in diesem Thread lassen Sie glauben, dass eine Variable undefiniert ist, obwohl sie definiert wurde (z. B. mit dem Wert NULL oder 0).
ReferenceError
.
undefined
ein Objekt in Javascript ist eine Fehlinformation. Bezieht sich diese Aussage trotzdem auf Ihre Antwort? Dies ist ein Wert undefined
vom Typ undefined
, der dem genannten globalen Bezeichner zugewiesen ist undefined
.
undefined
wurde nur seit ES5 gelesen. Sie können if (x === undefined) {...}
mit der folgenden Kurzform sicher auf undefiniert testen : if (x === void 0)
.
Technisch gesehen ist die richtige Lösung (glaube ich):
typeof x === "undefined"
Sie können manchmal faul werden und verwenden
x == null
Dadurch können jedoch sowohl eine undefinierte Variable x als auch eine Variable x, die null enthält, true zurückgeben.
var x;
und dann werden typeof x;
Sie "undefined"
genau so, wie Sie es getan habentypeof lakjdflkdsjflsj;
Eine noch einfachere und kürzere Version wäre:
if (!x) {
//Undefined
}
ODER
if (typeof x !== "undefined") {
//Do something since x is defined.
}
Ich habe oft getan:
function doSomething(variable)
{
var undef;
if(variable === undef)
{
alert('Hey moron, define this bad boy.');
}
}
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);
var a = false;
? Sie sollten das überprüfen, wenn a===undefined
stattdessen
var x;
Wenn Sie oben tun, wird ein Fehler
!a
wahr für undefined
, sondern auch wahr für 0
und null
und false
. Dies ist sehr falsch und sollte entfernt werden.
Ich benutze oft den einfachsten Weg:
var variable;
if (variable === undefined){
console.log('Variable is undefined');
} else {
console.log('Variable is defined');
}
BEARBEITEN:
Ohne Initialisierung der Variablen wird die Ausnahme "Uncaught ReferenceError: Variable ist nicht definiert ..." ausgelöst.
Uncaught ReferenceError: variable is not defined
variable
ist definiert durch var variable;
. Und dieses Snippet wird variable
im lokalen Bereich überschrieben . Es kann die Logik unterbrechen, die den Zugriff auf einen Abschluss oder eine globale Variable erwartet. Dh:var variable = 1; function test() { var variable; if (variable === undefined){ console.log('Variable is undefined'); } else { console.log('Variable is defined: ' + variable); } } test(); // Variable is undefined
Eine andere mögliche "Lösung" besteht darin, das window
Objekt zu verwenden. Es vermeidet das Referenzfehlerproblem in einem Browser.
if (window.x) {
alert('x exists and is truthy');
} else {
alert('x does not exist, or exists and is falsy');
}
undefined
. Das wird das nicht tun.
Der Fehler sagt Ihnen, dass x
es nicht einmal existiert! Es wurde nicht deklariert , was sich von der Zuweisung eines Werts unterscheidet.
var x; // declaration
x = 2; // assignment
Wenn Sie deklarieren x
, erhalten Sie keinen Fehler. Sie erhalten eine Warnung, die besagt, undefined
dass x
vorhanden / deklariert wurde, aber kein Wert zugewiesen wurde.
Um zu überprüfen, ob die Variable deklariert wurde, können Sie mit typeof
jeder anderen Methode überprüfen, ob eine Variable vorhanden ist, denselben Fehler auslösen, den Sie ursprünglich erhalten haben.
if(typeof x !== "undefined") {
alert(x);
}
Hiermit wird der Typ des in gespeicherten Werts überprüft x
. Es wird nur zurückkehren , undefined
wenn x
nicht erklärt worden ist oder wenn es wurde erklärt worden und wurde noch nicht zugeordnet.
typeof
Operator nicht mehr .
Der void
Operator gibt undefined
für jedes an ihn übergebene Argument / Ausdruck zurück. Sie können also anhand des Ergebnisses testen (tatsächlich ändern einige Minifizierer 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
}
typeof
und das Denken undefined
kann neu zugewiesen werden, was seit etwa einem Jahrzehnt nicht mehr möglich war.
undefined
, denn Gott weiß nur, aus welchem Grund, wird die Verwendung void 0
immer zurückkehren, undefined
unabhängig davon.
Die akzeptierte Antwort ist richtig. Ich wollte nur noch eine Option hinzufügen. Sie können try ... catch
Block auch 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 chaotisch ist, da er einen Bereich auf Blockebene erstellt. Und natürlich ist das Beispiel extrem vereinfacht, um die gestellte Frage zu beantworten. Es behandelt keine Best Practices bei der Fehlerbehandlung;).
Ich verwende eine kleine Funktion, um zu überprüfen, ob eine Variable deklariert wurde, wodurch die Unordnung in meinen Javascript-Dateien erheblich verringert wird. Ich füge eine Prüfung für den Wert hinzu, um sicherzustellen, dass die Variable nicht nur existiert, sondern auch einen Wert erhalten hat. Die zweite Bedingung prüft, ob die Variable ebenfalls instanziiert wurde. Wenn die Variable definiert, aber nicht instanziiert wurde (siehe Beispiel unten), wird immer noch ein Fehler ausgegeben, wenn Sie versuchen, auf ihren Wert in Ihrem Code zu verweisen.
Nicht instanziiert - Instanziiert var my_variable;
-var my_variable = "";
function varExists(el) {
if ( typeof el !== "undefined" && typeof el.val() !== "undefined" ) {
return true;
} else {
return false;
}
}
Sie können dann eine bedingte Anweisung verwenden, um zu testen, ob die Variable wie folgt definiert UND instanziiert wurde ...
if ( varExists(variable_name) ) { // checks that it DOES exist }
oder um zu testen, ob es nicht definiert und instanziiert wurde ...
if( !varExists(variable_name) ) { // checks that it DOESN'T exist }
return typeof el !== "undefined" && typeof el.val() !== "undefined"