How does the var FOO = FOO || {} idiom in Javascript work?
从这个问题来看:在javascript中,"var foo=foo"(为该变量分配一个变量或一个空对象)是什么意思?
我了解到,
但是如何呢?
这就是我分析这种语法的方法:
所以:如果
否则,
那么在任何情况下,
在任何可能的情况下,在评估了
我的错误在哪里?
If FOO exists AND evaluates to Boolean value of True, then (FOO || {}) will return True
这不是
正确的解释是:
如果左侧为真值,则按左侧(即
1 2 3 4 5 6 | var zero = 0; var one = 1; var two = 2; console.log(zero || two); console.log(one || two); |
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.
这是错误的,但是如果您的背景是严格键入的语言,下面的几行会让您感到惊讶:)
表达式不返回布尔值。它返回可计算为true的表达式。
这是相同的文件
Returns expr1 if it can be converted to true; otherwise, returns expr2. Thus, when used with Boolean values, || returns true if either operand is true; if both are false, returns false.
Logical operators are typically used with Boolean (logical) values. When they are, they return a Boolean value. However, the && and || operators actually return the value of one of the specified operands, so if these operators are used with non-Boolean values, they may return a non-Boolean value.
文档中给出的不同示例可能有助于您理解上述单词。
1 2 3 4 5 | o4 = false || (3 == 4) // f || f returns false o5 = 'Cat' || 'Dog' // t || t returns"Cat" o6 = false || 'Cat' // f || t returns"Cat" o7 = 'Cat' || false // t || f returns"Cat" o8 = '' || false // returns false |
javascript
Returns expr1 if it can be converted to true; otherwise, returns
expr2. Thus, when used with Boolean values, || returns true if either
operand is true.
在布尔值中转换为
这是因为短路评估。
短路评估表示,只有当第一个参数不足以确定表达式的值时,才执行或评估第二个参数:当and(&;&;)函数的第一个参数的值为false时,整体值必须为false;当or()函数的第一个参数的值为true时,OV所有值必须为真。
但是,如果and函数的第一个参数的值为true,则必须执行或计算第二个参数以确定表达式的值;如果or函数的第一个参数的值为false,则必须执行或计算第二个参数以确定表达式的值。
如果是foo
有关详细信息,请参阅此处。
So: If FOO exists AND evaluates to Boolean value of True, then (FOO ||
{}) will return True
这个概念的问题在于演员阵容。这里的对象不是强制转换为Boolean,JS不动它。
因此,如果定义了foo,那么