为什么要使用逻辑 AND 表达式(使用 `&&` 运算符,双与号)作为独立语句?

问题描述 投票:0回答:2

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);
javascript conditional-statements operators truthiness logical-and
2个回答
9
投票

线路:

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

相当于:

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

逻辑 AND 运算符的

短路
性质有时会以这种方式使用,因为生成的代码比完整的
if
语句短。

也就是说,我个人不鼓励编写这样的代码,因为它比

if
语句的可读性和可维护性更差。


2
投票

逻辑 && 运算符是“惰性”的,它仅在第一个表达式为 true 时才计算第二个表达式。它相当于

if(cinnamon){ this.cinnamon=[...];}

类似地,

cinnamon || this.cinnamon=[...];
相当于
if(!cinnamon){this.cinnamon=[...];}
,因为当您评估 OR 时,仅当第一个表达式为 false 时,您才需要测试(并因此执行)第二个表达式。最好从补码中理解:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.