从这个问题:"var FOO = FOO || {}"(将变量或空对象分配给该变量)在Javascript中是什么意思?
我已经知道这var FOO = FOO || {}基本上意味着"如果FOO存在,那就保持不变,否则就把它变成空物".
但是怎么样?
这就是我解析这种语法的方法:
var FOO = (FOO || {})
所以:如果FOO存在AND并且计算布尔值为True,那么(FOO || {})将返回True,因此最终FOO将被完全覆盖并且从现在开始将保持布尔值True.
否则(FOO || {})将返回到{}evalueates的任何布尔值.由于空对象,{}总是计算为True ...
那么在任何情况下(FOO || {})都应评估为True,所以...
在任何可能的情况下,在评估之后var FOO = FOO || {},FOO应该保持普通的布尔值True,而不管之前持有的是什么.基本上,根据我的理解,var FOO = FOO || {}应该相当于var FOO = True.
我的错误在哪里?
Que*_*tin 10
如果FOO存在并且评估为布尔值True,则(FOO || {})将返回True
这不是||运算符在JS中的工作方式.
正确的解释是:
如果左侧是真值,则评估为左侧(即FOO),否则评估为右侧(即{}).
var zero = 0;
var one = 1;
var two = 2;
console.log(zero || two);
console.log(one || two);Run Code Online (Sandbox Code Playgroud)
所以:如果FOO存在并且评估为布尔值True,则(FOO || {})将返回True,因此最终FOO将被完全覆盖并且从现在开始将保持布尔值True.
这是错误的,但如果你的背景是严格类型的语言,下面的行会让你感到惊讶:)
表达式不返回布尔值.它返回可以计算为true的表达式.
这是相同的文档
如果可以转换为true,则返回expr1; 否则,返回expr2.因此,当与布尔值一起使用时,|| 如果任一操作数为true,则返回true; 如果两者都为假,则返回false.
逻辑运算符通常与布尔(逻辑)值一起使用.如果是,则返回布尔值.但是,&&和|| 运算符实际上返回其中一个指定操作数的值,因此如果这些运算符与非布尔值一起使用,则它们可能返回非布尔值.
文档中给出的不同示例可能有助于您理解上述内容.
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
Run Code Online (Sandbox Code Playgroud)
因此:如果 FOO 存在并且计算结果为布尔值 True,则 (FOO || {}) 将返回 True
这个概念的问题在于演员阵容。这里的对象没有转换为布尔值,JS 保持不变。
因此,如果定义了 FOO(FOO || {})将返回FOO,如果未定义将返回{}
| 归档时间: |
|
| 查看次数: |
522 次 |
| 最近记录: |