2017-07-29 132 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