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

时间:2016-01-11 15:55:43

标签: javascript

我正在尝试写出花哨的

  

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

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

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

我有理由相信这应该有用。

根据Douglas Crockford的书 JavaScript:The Good Parts

  

||运算符生成第一个操作数的值(如果是第一个)   操作数是真实的。否则,它产生第二个值   操作数。

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

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

应该相当于

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

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

那么为什么我会得到一个

  

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

当我写( obj['arr'] || obj['arr'] = [] ).push(5); ?????

时,Chrome中的

错误

1 个答案:

答案 0 :(得分:8)

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

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