2015-08-28 74 views
1

我有2個javascript代碼。他們之中檢查是否可變的變量等於空或變量的類型是未定義的。但在一種情況下,我得到錯誤,而在其他情況下,我沒有得到任何錯誤。JavaScript變量定義混淆

代碼1:

if (NS1 === null || typeof (NS1) === 'undefined') { 
    ... } 

代碼2:

if (window.NS1 === null || typeof (window.NS1) === 'undefined') { 
    ... } 

對於代碼1,我得到錯誤

NS1 is not defined

而對於代碼2我沒有得到任何錯誤。我不明白可能是什麼原因,因爲我還沒有定義NS1或window.NS1。所以我應該在這兩種情況下都會出錯。

+1

'NS1 === null' ---你」重新嘗試檢索不存在的變量的值。 – zerkms

+0

'typeof'不起作用。使用類似'typeof window.NS1' – Manwal

+2

如果您將'typeof'檢查移至'||'的左側,由於短路評估,您將不會得到任何錯誤〜if( typeof of NS1 ==='undefined'|| NS1 === null)' – Phil

回答

6

So I should get error in both the condition.

嘗試訪問在基準誤差一個未聲明的變量結果。但是,試圖訪問一個不存在財產,就像你在第二個例子中的事,會簡單的返回undefined,不會引發錯誤:

> console.log({}.foo); 
undefined 

這是JavaScript的是如何工作的。


1:當你做typeof NS1時,有人可能會爭辯說你也在訪問這個變量。雖然如此,typeof是特別的。即使變量未被聲明,它也會返回"undefined"

0

這是因爲null === undefined // --> false

NS1 === null是指可變NS1這是沒有定義,所以它拋出異常。

window.NS1 === null將評估爲,因爲window.NS1是不確定的。和undefined不等於空

NS1作爲未聲明的變量 - >例外
window.NS1爲未申報財產 - >未定義