2017-08-14 184 views
-1

所以我有這樣的情況基本上錯誤,當Javascript'或'||在這種情況下使用運營商

var a = someUndefinedVariable.name || ""; 

在這種情況下,爲什麼「A」不等於空字符串??? 這個表達式拋出一個錯誤,所以我認爲執行就停止了,Interpreter沒有到達帶有OR語句的部分。這樣對嗎? 但是,沒有屬性名稱一切正常。 非常感謝您的關注。

+0

不可回答的問題。 –

+0

@MarcoSalerno,我理解了它。 –

+0

你猜對了,這是不同的 –

回答

3

您可能會檢查someUndefinedVariable第一,以防止一個未定義的變量

var a = someUndefinedVariable && someUndefinedVariable.name || ""; 
+0

好的提示!謝謝! – Artdark92

6

由於someUndefinedVariable的性質的訪問,爲undefined,沒有財產name,所以它崩潰。其替換爲:

var a = (someUndefinedVariable && someUndefinedVariable.name) || ""; 
4

This expression throws an error so I think execution just stops and Interpreter does not reaching to the part with the OR statement. Is it right?

是。異常停止執行(除非你是catch他們)。

However, without property name everything works fine.

  1. 如果變量未聲明,並嘗試從中讀取數據,那麼你會得到一個異常:未捕獲的ReferenceError:FOO沒有被定義
  2. 如果聲明瞭一個變量,並且具有undefined值,那麼您可以自由訪問它。這只是undefined
  3. 試圖訪問undefined值的屬性會引發異常: 遺漏的類型錯誤:無法讀取的不確定

你正在處理的案件2和3

+0

非常感謝您的回答。現在一切都很清楚! – Artdark92

1

你屬性「欄」應該使用

var a = (someUndefinedVariable && someUndefinedVariable.name) || ""; 

因爲您指的是未定義變量的屬性,它會崩潰,而不是檢查變量是否存在於h之前和

+0

不錯的提示!謝謝! – Artdark92