Funktionen verstehen undefiniert

8

Da ich von einem Nicht-Javascript-Hintergrund komme, versuche ich meinen Kopf um "undefiniert" zu wickeln. Ich schrieb eine "isUndefined" -Funktion wie folgt:

%Vor%

Wenn ich meine Quelle eintippe (wo die Variable 'boo' nicht existiert), bekomme ich das erwartete Ergebnis "undefinierte Variable".

%Vor%

wenn ich folgendes eintippe:      console.log (isUndefined(undefined));

Ich bekomme das erwartete Ergebnis 'wahr'

Wenn ich eintippe: console.log(isUndefined(boo));

Ich bekomme:

  

Referenzfehler: boo ist nicht definiert.

Ich erwartete, "wahr" zu bekommen - meine Frage ist deshalb, warum die erste "direkte" Prüfung auf undefiniert das erwartete Ergebnis liefert, aber eine Funktion (), die dafür testet, nicht?

    
sc28 23.06.2013, 21:53
quelle

3 Antworten

7

Es besteht ein Unterschied zwischen einer vorhandenen Variablen, die zufällig den undefined -Wert enthält, und einer Variablen, die gar nicht existiert. Wenn ein Variablenname nicht existiert, ist es ein Fehler, zu versuchen, darauf zu verweisen.

Der Operator typeof ist ein Sonderfall: Er akzeptiert einen Namen, auch wenn es keine solche Variable mit diesem Namen gibt. Aber nur, wenn der Name tatsächlich verwendet wird mit der Operator typeof .

In Ihrem Funktionsbeispiel verwenden Sie einen Namen, der nicht existiert, und an der Stelle, an der der Name verwendet wird, gibt es keinen typeof operator . Hier tritt der Fehler auf. Es spielt keine Rolle, dass Sie den Namen in eine Funktion übergeben, die typeof verwendet; Diese Funktion wird nie aufgerufen, weil der Fehler bereits aufgetreten ist.

Ihre Funktion würde wie erwartet funktionieren, wenn Sie ihr einen vorhandenen Variablennamen geben. Dann würde es Ihnen sagen, ob diese Variable den Wert undefined hat oder nicht:

%Vor%

Wenn Sie eine globale Variable überprüfen würden, würde es funktionieren, wenn Sie window.boo statt nur boo angeben würden. Das liegt daran, dass es kein Fehler ist, auf eine nicht vorhandene Eigenschaft eines Objekts zu verweisen. Es gibt Ihnen nur den undefined -Wert, wenn Sie dies tun:

%Vor%

Das würde nicht funktionieren, wenn Sie überprüfen möchten, ob eine lokale Variable existiert, da dies keine Eigenschaft des window -Objekts ist.

    
Michael Geary 23.06.2013, 22:03
quelle
3

Lass es mich so sagen:

%Vor%

aus dem gleichen Grund - wenn Sie

anrufen %Vor%

Die Variable boo wird nicht gesendet, der Wert von boo wird gesendet. Da boo während des Aufrufs nicht definiert ist, erhalten Sie den Fehler, wenn Sie versuchen, den Wert zu erreichen.

Es ist erwähnenswert, dass typeof keine Funktion ist, sondern ein Operator

    
galchen 23.06.2013 21:58
quelle
2

Normalerweise ist das Verhalten in Javascript, um auf eine Variable zuzugreifen, die nicht existiert, ein ReferenceError zu werfen. Der typeof-Operator ist hier die Ausnahme, da er speziell so codiert ist, dass er einen solchen Fehler nicht liefert, wenn Sie ihm eine Variable übergeben, die nicht existiert.

Ссылка

  

11.4.3 Der Typ von Operator # Ⓣ

     

Die Produktion UnaryExpression: typeof UnaryExpression wird ausgewertet   wie folgt:

%Vor%

Um den ReferenceError zu vermeiden, können Sie boo vorher deklarieren, ohne ihm etwas zuzuweisen:

%Vor%     
hugomg 23.06.2013 22:11
quelle

Tags und Links