Überprüfung auf null / nicht definiert in JavaScript

8

Kann dieser Code

? %Vor%

in diesem Code sicher umgestaltet werden?

%Vor%

Ist das genau dasselbe? (Und wenn nicht, wie ist es anders?)

    
Šime Vidas 05.12.2010, 18:37
quelle

3 Antworten

11
___ qstnhdr ___ Überprüfung auf null / nicht definiert in JavaScript ___ tag123javascript ___ JavaScript (nicht zu verwechseln mit Java) ist eine dynamische Sprache mit mehreren Paradigmen auf hoher Ebene, die sowohl für das clientseitige als auch für das serverseitige Scripting verwendet wird. Verwenden Sie dieses Tag für Fragen zu ECMAScript und seinen verschiedenen Dialekten / Implementierungen (außer ActionScript und Google-Apps-Script). ___ qstntxt ___

Kann dieser Code

? %Vor%

in diesem Code sicher umgestaltet werden?

%Vor%

Ist das genau dasselbe? (Und wenn nicht, wie ist es anders?)

    
___ answer4360523 ___

Variablen können tatsächlich den Wert ReferenceError enthalten, was der Standardwert ist, wenn eine Variable nie zugewiesen wurde. So funktioniert foo , wenn Ihre Variable mit typeof deklariert wird oder wenn Sie einen Wert durch Zuweisung erhalten. Wenn dies nicht der Fall ist, erhalten Sie einen ReferenceError. Daher sind die beiden Snippets nicht äquivalent.

Wenn Sie sicher sein können, dass %code% deklariert ist, ist dies sicher und einfacher zu verstehen als Ihr ursprüngliches zweites Snippet, vorausgesetzt, dass nirgendwo im Code etwas wie %code% existiert:

%Vor%     
___ antwort4360482 ___

Nicht wirklich. In Ihrem zweiten Beispiel wird eine %code% Ausnahme ausgelöst, wenn %code% dies nicht tut wurde erklärt.

Andererseits können Sie mit dem % co_de sicher nach undefinierten nicht deklarierten Variablen suchen % operator.

    
___ answer4360506 ___

Ein einfaches Experiment beantwortet diese Frage:

%Vor%

Das obige Beispiel führt in vielen Browsern zu einem JavaScript-Fehler: %code% . Dies liegt daran, dass wir eine Variable verwendet haben, die zuvor nicht als Argument oder %code% im aktuellen Bereich deklariert wurde.

Der %code% -Operator dagegen enthält eine explizite Akkommodation für Variablen, die nicht definiert wurden - er gibt %code% zurück, also:

%Vor%

funktioniert wie erwartet.

Die Antwort ist also "nein" - sie sind nicht dasselbe - obwohl sie sich in einigen Javascript-Umgebungen genauso verhalten, in anderen -Umgebungen Das zweite Formular erzeugt Fehler, wenn %code% nicht definiert ist.

    
___
Daniel Vassallo 05.12.2010, 18:40
quelle
2

Ein einfaches Experiment beantwortet diese Frage:

%Vor%

Das obige Beispiel führt in vielen Browsern zu einem JavaScript-Fehler: "ReferenceError: Can't find variable: foo" . Dies liegt daran, dass wir eine Variable verwendet haben, die zuvor nicht als Argument oder var im aktuellen Bereich deklariert wurde.

Der typeof -Operator dagegen enthält eine explizite Akkommodation für Variablen, die nicht definiert wurden - er gibt 'undefined' zurück, also:

%Vor%

funktioniert wie erwartet.

Die Antwort ist also "nein" - sie sind nicht dasselbe - obwohl sie sich in einigen Javascript-Umgebungen genauso verhalten, in anderen -Umgebungen Das zweite Formular erzeugt Fehler, wenn foo nicht definiert ist.

    
Lee 05.12.2010 18:44
quelle
2

Variablen können tatsächlich den Wert undefined enthalten, was der Standardwert ist, wenn eine Variable nie zugewiesen wurde. So funktioniert foo != null , wenn Ihre Variable mit var deklariert wird oder wenn Sie einen Wert durch Zuweisung erhalten. Wenn dies nicht der Fall ist, erhalten Sie einen ReferenceError. Daher sind die beiden Snippets nicht äquivalent.

Wenn Sie sicher sein können, dass foo deklariert ist, ist dies sicher und einfacher zu verstehen als Ihr ursprüngliches zweites Snippet, vorausgesetzt, dass nirgendwo im Code etwas wie undefined = 42 existiert:

%Vor%     
PleaseStand 05.12.2010 18:48
quelle

Tags und Links