我正试着写下这个幻想
"如果数组存在则推送数组;否则,初始化数组然后推送"
实现.我在Chrome控制台中写道
var obj = new Object(); ( obj['arr'] || obj['arr'] = [] ).push(5);
我有理由相信这应该有效.
根据Douglas Crockford的书" JavaScript:The Good Parts",
的
||
操作者产生其第一个操作数的值,如果所述第一操作数是truthy.否则,它产生第二个操作数的值.
如果我输入obj['arr']
我的控制台,返回的值是undefined
,这是假的,而不是真的.如果我输入obj['arr'] = []
我的控制台,返回的值是该数组obj['arr'] = []
,这是真的.因此声明
( obj['arr'] || obj['arr'] = [] ).push(5);
应该相当于
(obj['arr'] = []).push(5)
它obj['arr'] = [5]
按预期返回.
那么为什么我得到一个
未捕获的ReferenceError:赋值中的左侧无效(...)
我写的时Chrome中的错误( obj['arr'] || obj['arr'] = [] ).push(5);
?????
操作顺序......你需要parens:
( obj['arr'] || (obj['arr'] = []) ).push(5);