2017-07-29 133 views
0

我认为下面会的工作,x是否申报或赋值或不:如果(x)的...给出了参考错误:X没有定义

if (x) 
    console.log("x is well defined"); 
else 
    console.log("x is not defined or null or false or 0 ..."); 

但是,我得到(当x无法在我的代码中声明):

x is not defined

为什么会发生这种情况?

(这是在Node.js的环境。)

+1

如果x没有声明这将这样做(这是一个预期的行为),另一方面'typeof x!=“undefined”不会抛出任何错误,即使x没有被声明。 – Vivick

+0

即使使用'typeof',你也可以得到参考错误,如果你真的依靠静态分析,它会更好。 – MinusFour

+0

你想知道什么?你似乎已经知道了解决方案:当你想使用它时,在代码中声明'x'。 – Bergi

回答

0

,如果你不在,如果范围的任何地方x声明(x)语句,会有参考错误。

为了避免这种情况,只需声明var x;在if(x)语句或其父范围的范围内。

现在,如果您只是声明:

var x;

这里x的值是未定义的,所以其他部分将被执行。

但是,如果你定义为:

var x = 1;

然后if语句将真实输出是x被很好地定义

这里的jsfiddle:https://jsfiddle.net/raushankumar0717/4ozmf7r5/

var x=1; 
 

 
if(x) 
 
\t alert("Defined"); 
 
else 
 
    alert("Not Defined");

+0

谢谢大家的回答。我和Jade(aka Pug)中的Javascript混淆了。在Jade中,总是可以测试一个未声明的变量。 Jade仍然是Javascript,但显然未声明的变量在进入Jade脚本时被赋予默认值。 –

0

按我的知识...... 如果我们看到x的值是“不确定”,因此它会给一个TypeError!

If u see this.. 
if(typeof x === 'undefined') 
    console.log("x is well defined"); 

这会给输出“x被明确定义” 纠正我,如果我有从你的问题别的东西! :)

0

if(x)时跑时,x检查并没有定义,所以你的if/else意味着什么时,JavaScript遇到未捕获错误。

你可以把它放在try/catch中,它会捕获错误,但是你的if/else不会记录任何东西。相反,你需要做的是这样的:

if (typeof x !== 'undefined') 
    console.log("x is well defined"); 
else 
    console.log("x is not defined or null or false or 0 ..."); 

或者,如果你还需要检查“x”是truthy,你可以使用:

if (typeof x !== 'undefined' && x) 
    console.log("x is well defined"); 
else 
    console.log("x is not defined or null or false or 0 ..."); 
+0

我已经看到这种模式经常使用:'var y = x || “默认值”;' –

+0

@OldGeezer同样的问题。 'x'没有定义,所以错误。但是,如果定义了'x',那么这个模式就可以工作,然后检查x是否真实。如果它真的很好,那么x的值就会被分配给y,比如“hello world”。否则,赋值'“默认值”。 – Ultimater

+0

但是你可以做的是在给定的上下文中放置'var x,y,z;',然后定义它。你会经常看到这样的事情:'(function(x){console.log(x ||“default value”);})();' – Ultimater