我想知道这条线的作用:
foo || (foo = this.foo)
在下面的函数定义中
someFunction: function(foo)
{
foo || (foo = this.foo);
...
}
我想知道这条线的作用:
foo || (foo = this.foo)
在下面的函数定义中
someFunction: function(foo)
{
foo || (foo = this.foo);
...
}
这可能更常见地写成:
someFunction: function(foo)
{
foo = foo || this.foo;
// do something with foo
}
它所做的只是将foo参数设置为上下文的foo实例变量,如果:
someFunction不带参数调用someFunctionfalsy使用诸如 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将回退到默认值。
如果foo没有交给someFunction,或者如果 的值foo评估为假,foo则将其this.foo作为“默认”值
编辑:它之所以有效,是因为包括 JS 在内的许多编程语言都使用短路评估。如果foo评估结果为真,引擎不会费心评估该(foo = this.foo)部分,因为整个语句已经为真。
如果foo为 false (记住 JS 不是强类型的,所以在这种用法中,那种意思是“不提供”),然后评估第二部分,并最终设置foo.
foo || (foo = this.foo);
是相同的
if (!!!foo) {
foo = this.foo;
}
据我了解,它会检查foo参数是否已设置,如果未设置,则使用默认值 ( this.foo) 覆盖它。
通常,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);
}