var FOO = FOO ||如何Javascript中的{} idiom工作? [英] How does the var FOO = FOO || {} idiom in Javascript work?
问题描述
从这个问题:什么是var FOO = FOO || {}" (将变量或空对象分配给该变量)是指Javascript?
我已经知道 var FOO = FOO || {}
本质上意味着如果存在FOO,则保持不变,否则将其设为空对象。
I've learned that var FOO = FOO || {}
essentially means "If FOO exists, then leave it untouched, else make it an empty object".
但是如何?
这就是我解析这种语法的方法:
This is how I would parse this syntax:
var FOO =(FOO || { })
所以:如果 FOO
存在并且评估为布尔值True,然后(FOO || {})
将返回True,因此最终 FOO
将被完全覆盖并保持布尔值从现在起的真值。
So: If FOO
exists AND evaluates to Boolean value of True, then (FOO || {})
will return True, so eventually FOO
will be completely overwritten and will hold the Boolean value of True from now on.
否则(FOO || {})
将返回任何布尔值 {}
evalueates to。由于 {}
的空对象总是计算为True ...
Else (FOO || {})
will return to whatever Boolean value {}
evalueates to. Since an empty object, which {}
is, always evaluates to True...
然后在任何情况下(FOO || {})
应该评估为True,所以......
Then in ANY case (FOO || {})
should evaluate to True, so...
在任何可能的情况下,评估后 var FOO = FOO || {}
,FOO应该保持普通的布尔值True,无论之前持有什么。基本上,根据我的理解, var FOO = FOO || {}
应相当于 var FOO = True
。
In ANY POSSIBLE CASE, after evaluating var FOO = FOO || {}
, FOO should hold the trivial Boolean value of True, regardless of whatever it was holding before. Essentially, to my understanding, var FOO = FOO || {}
should be equivalent to var FOO = True
.
我的错误在哪里?
推荐答案
如果FOO存在且评估为布尔值True,则(FOO || { })将返回True
If FOO exists AND evaluates to Boolean value of True, then (FOO || {}) will return True
这不是 ||
运算符的方式适用于JS。
That isn't how the ||
operator works in JS.
正确的解释是:
如果左侧是真值,请评估作为左侧(即 FOO
),否则评估为右侧(即 {}
)。
If the left hand side is a true value, evaluate as the left hand side (i.e. FOO
), otherwise evaluate as the right hand side (i.e. {}
).
var zero = 0;
var one = 1;
var two = 2;
console.log(zero || two);
console.log(one || two);
这篇关于var FOO = FOO ||如何Javascript中的{} idiom工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!