如何理解这个逻辑和三元运算符的例子?

How to understand this example of a logical and ternary operator?

我理解三元运算符本质上是 if-else 语句的快捷方式,我也理解 && 是逻辑与。但是,我不明白这两者在下面的代码中是如何结合的。

我也试过输出,但没有用。我如何解释以下内容?

function greetUser(customerName, sex)  {
  var salutation  = sex && sex === "Man" ? "Mr." : "Ms.";
  console.log("Hello, " + salutation + " " + customerName);
}

sex 不是 undefined 并且 sex 是 Man 那么 Mr. ;否则 Ms.。因此,如果性别未定义;也会是Ms.

一般来说,三元运算符的意思是:

condition ? (value returned if condition is true) : (value returned if condition is false)

在你的例子中,条件是sex && sex === 'Man',这意味着变量sex中包含的值是truthy and strictly equal到字符串 "Man".

细目如下:

var salutation;
if(sex && sex === 'Man') {  
    salutation = 'Mr';
} else {
    salutation = 'Ms';
}

此外,在这个特定示例中,由于您使用的是严格相等(即===)比较,因此对[的真实性检查没有任何意义=16=],没必要。您的条件可以是:

var salutation = sex === "Man" ? "Mr." : "Ms.";

说明:当使用&&时,两个操作数都首先被强制转换为布尔值,因此它们的"truthfulness"可以是AND-ed。例如,假设 sex = 'Man',那么您的条件基本上是:

if('Man' && 'Man' === 'Man')

强制转换为布尔值的是:

if(true && true)

这显然是多余的。 Read more about JavaScript type coercion.

在使用 non-strict 比较运算符(例如 ==<> ...而不是 ===.

简单来说,使用==首先将两个项目强制转换为同一类型,然后再进行比较lead to bugs。如果类型不同,立即使用 === returns false,因此它更安全。

这里有一个 another useful resource 用于 JavaScript 比较。

你可以换行

var salutation  = sex && sex === "Man" ? "Mr." : "Ms.";

var salutation  = ((sex) && (sex === "Man" ? "Mr." : "Ms."));

现在 sex === "Man" ? "Mr." : "Ms." 告诉你,如果 sex 变量的值是 Man 并且两个变量的类型相同(在本例中是 String),那么它应该 return Mr 否则 Ms.

&& 是逻辑 and 定义为

(true && true) == true
(true && false) == false
(false && true) == false
(false && false) == false

因此,只有当 A 和 B 都为真时,命题 A && B 才为真

对于您的情况,对于三元运算符,一些括号可能会有所帮助,因此您可以了解这些运算符的计算顺序。

(sex && (sex === "Man")) ? "Mr." : "Ms."

所以,用英语...

如果 sex 存在并且 sex'Man' 那么 "Mr." 否则 "Ms."

一般来说,三元运算符是这样工作的:

(true OR false) ? (value if true) : (value if false)