JavaScript运行时错误:';变量';在检查是否未定义时未定义

JavaScript运行时错误:';变量';在检查是否未定义时未定义,javascript,html,inline,Javascript,Html,Inline,我用HTML和一些内联JS编写了以下几行代码: <% if (x !== undefined || x !== null) { %> <div> Foo </div> <% } %> 以及这个错误: 0x800a1391 - JavaScript runtime error: 'x' is undefined 有人能解释为什么会发生这种情况吗?这是因为您试图访问一个从未定义过的变量 例如: “严格使用”; 控制台日志(x)javasc

我用HTML和一些内联JS编写了以下几行代码:

 <% if (x !== undefined || x !== null) { %>
  <div> Foo </div>
 <% } %>
以及这个错误:

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

有人能解释为什么会发生这种情况吗?

这是因为您试图访问一个从未定义过的变量

例如:

“严格使用”;

控制台日志(x)javascript代码中未定义变量x。用typeof操作员进行检查

typeof x=="undefined"

如果if返回true,则未定义变量x。

为了让Javascript比较
x
变量的值,它必须查找它;由于它尚未定义,因此会抛出一条错误消息。此错误发生在运行时甚至尝试将值与
未定义的值进行比较之前。这有点鸡和蛋的问题

请改用
typeof x===“undefined”

试试这个

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

!对于空字符串NaN、null、未定义,x
将返回true。

不完全确定
是什么语法(经典ASP?),但作为替代方法,如果全局对象上存在
x
,则进行嗅探

因为您已经标记了这个
html
,所以您的全局对象应该是
window
。(例如,在节点中,全局对象实际上是
global


改为选中
typeof x==“undefined”
。发生这种情况是因为没有定义…
x
。JS很少有这样的层次,但是错误消息并不总是清晰的,因为区别
var x
声明了一个变量,它的值是
undefined
。所以,你可以使用它,因为可以说“它们存在”。未声明的变量往往会抛出错误,例如您看到的错误,因为您试图访问不存在的东西(未声明)。虽然
x=5
将在非严格模式下隐式设置
窗口.x
。但这仍然不起作用,如果未声明
x
,则在查找时会抛出错误。
<% if (!x) { %>
  <div> Foo </div>
<% } %>
<% if (window.x) { %>
  <div> Foo </div>
<% } %>
<% if (window.x !== undefined && window.x !== null) { %>
  <div> Foo </div>
<% } %>