foo || (foo = this.foo)它做了什么?

时间:2012-10-15 06:12:13

标签: javascript backbone.js

我想知道这条线的作用:

foo || (foo = this.foo)

在以下函数定义中

someFunction: function(foo)  
{   
    foo || (foo = this.foo);  
    ...  
}

5 个答案:

答案 0 :(得分:6)

这可能更常被写为:

someFunction: function(foo)  
{   
    foo = foo || this.foo;
    // do something with foo
}

它只是将foo参数设置为上下文的foo实例变量,如果:

  • someFunction不带参数调用
  • 使用someFunction参数调用
  • falsy,例如false,空字符串,0,null或undefined。

作为一个例子,假设someFunction是在对象文字中定义的,如下所示:

var myObject = {
    foo: "default value of foo",
    someFunction: function(foo)  
    {   
        foo = foo || this.foo;
        // do something with foo
    }
}

这样,someFunction的参数foo会在需要时回退到默认值。

答案 1 :(得分:4)

如果foo未提交给someFunction,或者foo的值评估为false,则foothis.foo作为“默认”值

编辑:它的工作原理是因为许多编程语言(包括JS)都使用short-circuit evaluation。如果foo的计算结果为true,则引擎将不会考虑评估(foo = this.foo)部分,因为整个语句已经为真。

如果foo为假(并且记住JS没有强类型,那么在这种用法中,这种方式“未提供”),则第二部分评估,最终设置foo的值。

答案 2 :(得分:0)

据我了解,它检查foo参数是否设置,如果没有,则用默认值(this.foo)覆盖它。

答案 3 :(得分:0)

通常,foo是虚拟变量的占位符。

someFunction: function(foo)
{
    // If foo is null, then foo is assigned with this.foo
    // If not, the original value of foo is taken.
    foo || (foo = this.foo);
}

答案 4 :(得分:0)

foo || (foo = this.foo); 

相同
if (!!!foo) {
    foo = this.foo;
}