2016-01-11 63 views
2

我想寫看中爲什麼(obj ['arr'] || obj ['arr'] = []).push(5);給我一個「分配中無效的左側」錯誤?

"Push on the array if the array exists; else, initialize the array and then push"

實施。我在我的Chrome控制檯中寫道

var obj = new Object(); 
(obj['arr'] || obj['arr'] = []).push(5); 

我有理由相信這應該起作用。

據道格拉斯Crockford的書的JavaScript:好的部分

The || operator produces the value of its first operand if the first operand is truthy. Otherwise, it produces the value of the second operand.

如果鍵入obj['arr']到我的控制檯,返回的值是undefined,這是falsy,不truthy。如果我輸入obj['arr'] = []到我的控制檯,返回的值是數組obj['arr'] = [],這是truthy。因此,聲明

(obj['arr'] || obj['arr'] = []).push(5); 

應相當於

(obj['arr'] = []).push(5) 

預期返回obj['arr'] = [5]

所以後來爲什麼會在Chrome瀏覽器

Uncaught ReferenceError: Invalid left-hand side in assignment(…)

錯誤,當我寫(obj['arr'] || obj['arr'] = []).push(5); ?????操作

+0

雖然你爲什麼想,在所有的,是這不是明擺着看來,'='比''||更高的優先級。嘗試圍繞您的任務說明使用括號。 – SmokeDispenser

回答

8

爲了......你需要括號:

(obj['arr'] || (obj['arr'] = [])).push(5); 
+0

我失敗了計算機科學101 :( – user5648283

+1

@smerny - OP正在定義它;我現在並不擔心其他情況, – andi

+0

@andi,啊。 – smerny

相關問題