我有以下用HTML和一些内联JS编写的行:
<% if (x !== undefined || x !== null) { %>
<div> Foo </div>
<% } %>
它产生这个动态函数代码:
if (x !== undefined || x !== null) {...
以及此错误:
0x800a1391 - JavaScript runtime error: 'x' is undefined
任何人都可以解释为什么会这样吗?
答案 0 :(得分:2)
这是因为您尝试访问从未定义过的变量。
示例:
'use strict';
console.log(x);
&#13;
您可以使用typeof
operator检查是否已声明变量:
'use strict';
console.log(typeof x === 'undefined');
&#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} } - 例如,undefined
或0
- 它仍会绊倒""
。
虽然我很确定你想要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。