使用|| if语句之外的(或运算符)

Die*_*dez 0 javascript

所以我正在阅读Airbnb的JS样式指南,我不明白OR运算符在下面的例子中做了什么.更具体地说,在Jedy构造options || (options = {});函数中,如果没有将参数传递给构造函数,那么基本上是创建一个空对象吗?因此,nameJedi构造函数的属性将设置为'no name'

function Jedi(options) {
    options || (options = {});
    this.name = options.name || 'no name';
}

Jedi.prototype.getName = function getName() {
    return this.name;
};

Jedi.prototype.toString = function toString() {
    return 'Jedi - ' + this.getName();
};
Run Code Online (Sandbox Code Playgroud)

PS.似乎有很多简单的方法用JS做事.是否有任何好的资源或文章解释这些是什么以及什么时候最好使用它们?

Tho*_*ith 6

||操作有两个参数.如果第一个参数是"truthy"值,则返回第一个参数; 否则,它返回第二个.它也短路; 也就是说,如果第一个参数是真实的,它就不会评估第二个参数.如果第二个参数是具有副作用的表达式,则这可能非常重要.

该声明options || (options = {});依赖于此.如果options是真实的,则不会评估赋值表达式.如果它是假的,那么将评估第二个表达式.

现在,这功能相当于声明options = options || {};.从理论上讲,这个陈述可能会稍慢一些,因为它会分配options给自己,而不是简单地分配任何东西.但是,这种影响可以忽略不计.


归档时间:

查看次数:

980 次

最近记录:

10 年,4 月 前