JavaScript这行代码的含义是什么?

3

我正在学习JavaScript,但不知道为什么要这样写。 有人能帮忙解释一下为什么JavaScript要这样写吗?

cinnamon && (this.cinnamon = [1, "stick", "Saigon"])是什么意思?
我理解上面的第一行。 第二行似乎是使用&&进行比较运算符,但没有将其赋值给任何变量。

      var VanillaBean = function(vanilla, cinnamon) {
      this.vanilla = [1, "bean", vanilla ? vanilla : "Madagascar Bourbon"];
      cinnamon && (this.cinnamon = [1, "stick", "Saigon"]);  //?????
    };
    VanillaBean.prototype = {
      heavyCream: [1, "cup", "Organic Valley"],
      halfHalf: [2, "cup", "Organic Valley"],
      sugar: [5/8, "cup"],
      yolks: [6]
    };
    var vanilla = new VanillaBean("Tahitian", true);
    console.dir(vanilla);

2
if (cinnamon) this.cinnamon = [...] 相同 - elclanrs
更准确地说,如果第一个操作数不为真,则没有必要执行操作&&的第二个成员,因为两者都需要为真才能得到真结果,这意味着如果第一个为真,则执行第二个,如上所述。 - Virus721
2个回答

9

这行代码:

cinnamon && (this.cinnamon = [1, "stick", "Saigon"]);

等同于:

if (cinnamon) {
    this.cinnamon = [1, "stick", "Saigon"];
}

逻辑上的短路特性使得逻辑 AND 操作符有时会被用于这种方式,因为生成的代码比完整的 if 语句更短。

话虽如此,我个人不鼓励编写这样的代码,因为它比 if 语句更难以阅读和维护。


2

逻辑运算符 && 是“懒惰”的,只有在第一个表达式为真时才会评估第二个表达式。它等同于 if(cinnamon){ this.cinnamon=[...];}

类似地,cinnamon || this.cinnamon=[...]; 等同于 if(!cinnamon){this.cinnamon=[...];},因为当你评估 OR 时,只有在第一个表达式为 false 时才需要测试(并因此执行)第二个表达式。最好从补集理解:

(false && anything)=false,因此不要费力执行第二个套件

(true || anything)=true,因此不要费力执行第二个套件


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接