Javascript中的成语工作?

从这个问题来看:在Javascript中,“var FOO = FOO || {}”(为变量赋一个变量或空对象)是什么意思?

我已经知道var FOO = FOO || {} var FOO = FOO || {}本质上的意思是“如果FOO存在,则不要触摸它,否则将它作为空对象”。

但是如何?

这是我如何解析这个语法:

var FOO = (FOO || {})

因此:如果存在FOO并且计算结果为布尔值True,则(FOO || {})将返回True,因此最终FOO将被完全覆盖并且从现在开始将保持布尔值为True。

否则(FOO || {})将返回任何布尔值{} evalueates。 由于{}为空的对象总是评估为真...

那么在任何情况下(FOO || {})应该评估为真,所以...

在任何可能的情况下,评估var FOO = FOO || {} var FOO = FOO || {} ,FOO应该保持True的平凡布尔值,而不管之前持有的是什么。 从本质上讲,就我的理解而言, var FOO = FOO || {} var FOO = FOO || {}应该等同于var FOO = True

我的错误在哪里?


如果存在FOO并且计算为布尔值True,则(FOO || {})将返回True

那不是|| 运算符在JS中工作。

正确的解释是:

如果左侧为真值,则评估为左侧(即FOO ),否则评估为右侧(即{} )。

var zero = 0;
var one = 1;
var two = 2;

console.log(zero || two);
console.log(one || two);

因此:如果存在FOO并且计算结果为布尔值True,则(FOO || {})将返回True,因此最终FOO将被完全覆盖并且从现在开始将保持布尔值为True。

这是错误的,但如果你的背景是严格键入的语言,下面的行会让你大吃一惊:)

该表达式不返回布尔值。 它将可以评估的表达式返回为true。

这里是相同的文档

如果可以将其转换为true,则返回expr1; 否则,返回expr2。 因此,当与布尔值一起使用时,|| 如果任一操作数为真,则返回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

JavaScript || 运算符返回表达式本身而不是布尔值。 以下是Mozilla文档的参考资料

如果可以将其转换为true,则返回expr1; 否则,返回expr2。 因此,当与布尔值一起使用时,|| 如果任一操作数为真,则返回true。

Reference :

在布尔中转换为True取决于表达式是否计算为Truthy值。

链接地址: http://www.djcxy.com/p/72867.html

上一篇: {} idiom in Javascript work?

下一篇: Boolean evaluation of JavaScript arrays