我正在尝试写出花哨的
“如果数组存在则推送数组;否则,初始化数组和 然后推“
实现。我在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中的错误
答案 0 :(得分:8)
操作顺序......你需要parens:
( obj['arr'] || (obj['arr'] = []) ).push(5);