2013-04-29 144 views
4

我在瀏覽器控制檯中嘗試了一些javascript,並且不確定爲什麼這不起作用。在我嘗試控制檯和的jsfiddle下面的代碼引發錯誤:未捕獲的ReferenceError:未定義富爲什麼「foo = foo || {};」不行?

foo = foo || {}; 

我解釋這個問題的方法是:如果全局對象的FOO(在這種情況下,窗口)不存在,則將其創建爲空對象。

或者,代碼window.foo = window.foo || {};按我的預期工作。事先爲foo指定一個值foo = 'bar'使得原來的語句也可以在以後運行。

+0

'var foo = foo || {};'這將按預期工作,至少在Chrome中。 – Kao 2013-04-29 06:34:31

+0

正確,它使用var關鍵字時有效,但不是沒有。 – 2013-04-29 06:46:35

回答

9

你必須檢查foo是否首先被定義:

foo = typeof foo !== 'undefined' ? foo : {}; 

它可能有點不直觀,但是未定義的,並具有的值之間的差undefined(其window.foo返回時window沒有按」沒有foo屬性)。

一個更好的辦法是添加了var關鍵字:

var foo = foo || {}; 

其中一期工程,因爲JavaScript捲揚變量聲明到當前範圍的頂部,宣佈foo,給它的undefined值:

var foo; 

foo = foo || {}; 
+0

啊,是清除它。感謝您的詳細解答,非常感謝! – 2013-04-29 06:45:36

相關問題