为什么(obj ['arr'] || obj ['arr'] = []).push(5); 给我一个"分配中无效的左手边"错误?

use*_*283 2 javascript

我正试着写下这个幻想

"如果数组存在则推送数组;否则,初始化数组然后推送"

实现.我在Chrome控制台中写道

var obj = new Object();
( obj['arr'] || obj['arr'] = [] ).push(5);
Run Code Online (Sandbox Code Playgroud)

我有理由相信这应该有效.

根据Douglas Crockford的书" JavaScript:The Good Parts",

||操作者产生其第一个操作数的值,如果所述第一操作数是truthy.否则,它产生第二个操作数的值.

如果我输入obj['arr']我的控制台,返回的值是undefined,这是假的,而不是真的.如果我输入obj['arr'] = []我的控制台,返回的值是该数组obj['arr'] = [],这是真的.因此声明

( obj['arr'] || obj['arr'] = [] ).push(5);
Run Code Online (Sandbox Code Playgroud)

应该相当于

(obj['arr'] = []).push(5)
Run Code Online (Sandbox Code Playgroud)

obj['arr'] = [5]按预期返回.

那么为什么我得到一个

未捕获的ReferenceError:赋值中的左侧无效(...)

我写的时Chrome中的错误( obj['arr'] || obj['arr'] = [] ).push(5);?????

and*_*ndi 8

操作顺序......你需要parens:

( obj['arr'] || (obj['arr'] = []) ).push(5);
Run Code Online (Sandbox Code Playgroud)