我想知道这条线的作用:
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
不带参数调用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
将回退到默认值。
如果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);
}