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);
4

2 回答 2

9

该行:

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

相当于:

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

有时以这种方式使用逻辑运算符的短路特性,因为AND生成的代码比完整的if语句短。

也就是说,我个人不鼓励编写这样的代码,因为它的可读性和可维护性不如if语句。

于 2013-09-05T08:32:22.470 回答
2

逻辑 && 运算符是“惰性的”,如果第一个表达式为真,它只会计算第二个表达式。它相当于if(cinnamon){ this.cinnamon=[...];}

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

(false && anything)=false,所以不要费心执行第二个套件

(true || any)=true,所以不要费心执行第二个套件

于 2013-09-05T08:34:13.067 回答