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?
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:
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:
Das würde nicht funktionieren, wenn Sie überprüfen möchten, ob eine lokale Variable existiert, da dies keine Eigenschaft des window
-Objekts ist.
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
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:
Tags und Links javascript