Javascript这行代码是什么意思

Javascript这行代码是什么意思,javascript,Javascript,我正在学习Javascript,但不知道为什么这一行是这样写的。有人能解释一下为什么javascript会这样编写代码吗 肉桂是什么意思 我理解上面的第一行。第二行似乎是对&&执行比较运算符,但没有将其分配给任何变量 var VanillaBean = function(vanilla, cinnamon) { this.vanilla = [1, "bean", vanilla ? vanilla : "Madagascar Bourbon"]; cinna

我正在学习Javascript,但不知道为什么这一行是这样写的。有人能解释一下为什么javascript会这样编写代码吗

肉桂是什么意思 我理解上面的第一行。第二行似乎是对&&执行比较运算符,但没有将其分配给任何变量

      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);
该行:

cinnamon && (this.cinnamon = [1, "stick", "Saigon"]);
相当于:

if (cinnamon) {
    this.cinnamon = [1, "stick", "Saigon"];
}
逻辑
运算符的性质有时是这样使用的,因为生成的代码比完整的
if
语句短


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

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

类似地,
肉桂| | this.肉桂=[…]
相当于
if(!肉桂){this.肉桂=[…];}
因为在计算OR时,只有在第一个表达式为false时,才需要测试(并因此执行)第二个表达式。最好从补语中理解:

(false&&anything)=false,因此不必麻烦执行第二个套件


(true | | anythis)=true,因此不必麻烦执行第二组

与if(肉桂)this相同。肉桂=[…]更准确地说,不需要执行操作的第二个成员&&如果第一个不是true,因为两个都需要为true,结果才是true,这意味着,如果第一个为真,则执行第二个,如上所述。