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 nullist ein Objekt. Es gibt einen anderen Wert für Dinge, die es nicht gibt undefined. Das DOM gibt nullin fast allen Fällen zurück, in denen es keine Struktur im Dokument findet, aber in JavaScript selbst undefinedwird 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 typeofeine nicht deklarierte Variable und eine mit dem Wert deklarierte Variable undefinedals äquivalent behandelt werden.
Um zu überprüfen, ob eine Variable deklariert ist und nicht undefined:
if (yourvar !== undefined) // Any scope
Bisher musste der typeofOperator verwendet werden, um sicher nach undefiniert zu suchen, da eine Neuzuweisung undefinedwie bei einer Variablen möglich war. Der alte Weg sah so aus:
if (typeof yourvar !== 'undefined') // Any scope
Das Problem der undefinedNeuzuweisung wurde in ECMAScript 5 behoben, das 2009 veröffentlicht wurde. Sie können es jetzt sicher verwenden ===und !==testen, undefinedohne es zu verwenden, typeofda undefinedes 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)
typeofOperator ( typeof null == 'object') der Schuldige dieses Missverständnisses . Der nullWert ist ein primitiver Wert , der der einzige Wert vom Typ Null ist .
Der einzige Weg, um wirklich zu testen, ob eine Variable besteht, undefinedbesteht 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.
undefinedein Objekt in Javascript ist eine Fehlinformation. Bezieht sich diese Aussage trotzdem auf Ihre Antwort? Dies ist ein Wert undefinedvom Typ undefined, der dem genannten globalen Bezeichner zugewiesen ist undefined.
undefinedwurde 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===undefinedstattdessen
var x; Wenn Sie oben tun, wird ein Fehler
!awahr für undefined, sondern auch wahr für 0und nullund 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
variableist definiert durch var variable;. Und dieses Snippet wird variableim 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 windowObjekt 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 xes 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, undefineddass xvorhanden / deklariert wurde, aber kein Wert zugewiesen wurde.
Um zu überprüfen, ob die Variable deklariert wurde, können Sie mit typeofjeder 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 , undefinedwenn xnicht erklärt worden ist oder wenn es wurde erklärt worden und wurde noch nicht zugeordnet.
typeofOperator nicht mehr .
Der voidOperator gibt undefinedfü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 undefinedin void 0, um ein paar Zeichen zu speichern).
Zum Beispiel:
void 0
// undefined
if (variable === void 0) {
// variable is undefined
}
typeofund das Denken undefinedkann 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 0immer zurückkehren, undefinedunabhängig davon.
Die akzeptierte Antwort ist richtig. Ich wollte nur noch eine Option hinzufügen. Sie können try ... catchBlock 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 catchBlock, 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"