我正在学习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);
答案 0 :(得分:9)
该行:
cinnamon && (this.cinnamon = [1, "stick", "Saigon"]);
相当于:
if (cinnamon) {
this.cinnamon = [1, "stick", "Saigon"];
}
逻辑AND
运算符的short-circuiting性质有时会以这种方式使用,因为生成的代码比完整的if
语句短。
那就是说,我个人不鼓励编写这样的代码,因为它比if
语句的可读性和可维护性更差。
答案 1 :(得分:2)
逻辑&& operator是“lazy”,如果第一个表达式为true,它只计算第二个表达式。它相当于if(cinnamon){ this.cinnamon=[...];}
类似地cinnamon || this.cinnamon=[...];
等同于if(!cinnamon){this.cinnamon=[...];}
,因为当您评估OR时,只有在第一个表达式为false时才需要测试(并因此执行)第二个表达式。最好从互补物:
(false&& anything)= false,所以不要打扰执行第二套件
(true || anything)= true,所以不要打扰执行第二套件