我不明白为什么
(var ||= []) << 1
按预期工作但
(var ||= true) = false
不
有人可以解释为什么它不起作用以及这里发生了什么?
答案 0 :(得分:12)
a ||= b
的行为与a || a = b
相似。
作业返回指定的值,即var = true
返回true
。
var ||= true
将评估作业var = true
,因为此时var
未定义。如果定义了var
且其值为true
,则会返回var
的值,即true
;如果它是假的,它将返回true
的值,即true
。
var ||= []
返回[]
,您的第一个表达式评估为[] << 1
,这是合法的。
但是,您的第二个表达式求值为true = false
,这会引发编译错误。
<强> TL;博士强>
(var ||= []) << 1
⟺(var = []) << 1
⟺[] << 1
✔
(var ||= true) = false
⟺(var = true) = false
⟺true = false
✘
答案 1 :(得分:3)
在第一种情况下,您有一个对象,并使用其<<
方法。
在第二种情况下,您有一个赋值,其中右表达式必须分配给左侧的变量,而不是对象或表达式。