2016-08-10 3 views
3

Ich habe die folgenden Zeilen mit HTML geschrieben und einigen Inline JS:JavaScript-Laufzeitfehler: ‚Variable‘ ist nicht definiert, während Sie prüfen, ob nicht definiert

<% if (x !== undefined || x !== null) { %> 
    <div> Foo </div> 
<% } %> 

Es produziert diesen dynamischen Funktionscode:

if (x !== undefined || x !== null) {... 

Neben dieser Fehler:

0x800a1391 - JavaScript runtime error: 'x' is undefined 

Kann mir jemand erklären, warum dies geschieht?

+0

prüfen 'typeof x == "undefined"' statt. – Sampson

+1

Es passiert, weil ... 'x' nicht definiert ist. JS hat einige Schichten davon, aber die Fehlermeldungen sind nicht immer klar für die Unterscheidung 'var x' _declares_ eine Variable und ihre _value_ ist' undefiniert'. Sie werden es also nutzen können, weil sie sozusagen existieren. Nicht deklarierte Variablen tendieren dazu, Fehler zu verursachen, wie beispielsweise den, den Sie gesehen haben, weil Sie versuchen, auf etwas zuzugreifen, das nicht existiert (nicht deklariert). Obwohl "x = 5" wird implizit ein 'window.x' im nicht-strikten Modus gesetzt. – vlaz

Antwort

2

Damit Javascript den Wert der x Variable vergleichen kann, muss es nachschlagen; Da es noch nicht definiert ist, wird eine Fehlermeldung ausgegeben. Dieser Fehler tritt auf, bevor die Laufzeitumgebung versucht, den Wert mit undefined zu vergleichen. Es ist ein kleines Problem mit Huhn und Ei.

verwenden Sie stattdessen typeof x === 'undefined'.

2

Es ist, weil Sie versuchen, auf eine Variable zuzugreifen, die nie definiert wurde.

Beispiel:

'use strict'; 
 
console.log(x);

Sie können überprüfen, ob eine Variable deklariert wurde unter Verwendung der typeof operator:

'use strict'; 
 
console.log(typeof x === 'undefined');

0

Variable x ist in Ihrem JavaScript-Code nicht definiert. Führen Sie eine Überprüfung mit dem Operator typeof durch.

Wenn if returns true, dann ist Ihre Variable x nicht definiert.

0

versuchen diese

<% if (!x) { %> 
    <div> Foo </div> 
<% } %> 

!x wird für eine leere Zeichenfolge true zurück, NaN, null, nicht definiert.

+2

Das funktioniert aber immer noch nicht - wenn 'x' nicht deklariert ist, gibt es einen Fehler, wenn nachgeschlagen wird. – vlaz

1

Nicht ganz sicher, welche Syntax <% [some javascript] %> ist (Classic ASP?), Aber als Alternative, Sniff, wenn x auf Ihrem globalen Objekt existiert.

Da Sie dieses html markiert haben, sollte Ihr globales Objekt window sein. (In Knoten, als Beispiel ist das globale Objekt buchstäblich global.)

<% if (window.x) { %> 
    <div> Foo </div> 
<% } %> 

Und du bist fertig.

Sie könnten auch die ausführlichere verwenden, sondern auch präziser, Code Ich glaube, Sie in Ihrem Beitrag bestimmt, so dass, wenn x ist falsy aber nicht null oder undefined - zB 0 oder "" - es immer noch Ausflüge die if.

Obwohl Ich bin mir ziemlich sicher, dass Sie eine && dort, nicht eine || wollten. Das heißt, wie ursprünglich geschrieben, wird Ihr Zustand immer als wahr gewertet. Wenn x ist undefined, dann ist es per Definition nicht null, und umgekehrt!

Hier ist die gezwickt Version ...

<% if (window.x !== undefined && window.x !== null) { %> 
    <div> Foo </div> 
<% } %> 
Verwandte Themen