我正试着写下这个幻想
"如果数组存在则推送数组;否则,初始化数组然后推送"
实现.我在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);?????
操作顺序......你需要parens:
( obj['arr'] || (obj['arr'] = []) ).push(5);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |