为什么 ( obj['arr'] || obj['arr'] = [] ).push(5);给我一个“作业中的左侧无效”

Why does ( obj['arr'] || obj['arr'] = [] ).push(5); give me a "Invalid left-hand side in assignment" error?

本文关键字:obj arr 作业 无效 为什么 push 一个      更新时间:2023-09-26

我正在尝试写花哨

"如果阵列存在,则推动阵列;否则,初始化数组并 然后推">

实现。我在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]

那为什么我会得到一个

未捕获的引用错误:赋值中的左侧无效(...(

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

操作顺序...你需要参数:

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