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

时间:2016-08-10 21:01:31

标签: javascript html inline

我有以下用HTML和一些内联JS编写的行:

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

它产生这个动态函数代码:

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

以及此错误:

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

任何人都可以解释为什么会这样吗?

5 个答案:

答案 0 :(得分:2)

这是因为您尝试访问从未定义过的变量。

示例:

&#13;
&#13;
'use strict';
console.log(x);
&#13;
&#13;
&#13;

您可以使用typeof operator检查是否已声明变量:

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

答案 1 :(得分:2)

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

改为使用typeof x === 'undefined'

答案 2 :(得分:1)

不完全确定<% [some javascript] %>是什么语法(经典ASP?),但作为替代方案,如果全局对象上存在x,则会嗤之以鼻。

由于您已标记此html,因此您的全局对象应为window。 (在节点中,作为示例,全局对象实际上是global。)

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

你已经完成了。

您还可以使用我认为您在帖子中打算使用的更详细但更精确的代码,以便x是假的而不是null或{{1} } - 例如,undefined0 - 它仍会绊倒""

虽然我很确定你想要if,而不是&& 。也就是说,按照最初的写法,您的条件将始终评估为真。如果||x,那么根据定义它不是undefined,反之亦然!

这是经过调整的版本......

null

答案 3 :(得分:0)

变量x未在您的javascript代码中定义。使用typeof运算符进行检查。

typeof x=="undefined"

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

答案 4 :(得分:0)

试试这个

<% if (!x) { %>
  <div> Foo </div>
<% } %>
对于空字符串,

!x将返回true,NaN,null,undefined。