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

时间:2016-01-13 04:17:03

标签: javascript ternary-operator logical-operators

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

我也尝试过输出,但它并没有帮助。我如何解释以下内容?

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

4 个答案:

答案 0 :(得分:3)

通常,三元运算符意味着:

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

在您的示例中,条件为sex && sex === 'Man',这意味着变量sex中包含的值为 truthystrictly equal 字符串"Man"

以下是细分:

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

此外,在此特定示例中,由于您使用严格相等(即===)比较,因此sex的真实性检查没有任何意义,这是不必要的。你的病情可能只是:

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

解释:当使用&&时,两个操作数首先被强制为布尔值,因此可以对它们的“真实性”进行AND运算。例如,假设sex = 'Man',那么您的条件基本上是:

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

强迫布尔人的是:

if(true && true)

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

在使用非严格比较运算符(例如==<> ...而不是{{}时,这种真实检查是一种很好的安全检查。 1}}。

简单来说,在比较===之前,使用==首先将两个项强制转换为相同的类型。 ===,因此更安全。

这是JavaScript比较的lead to bugs

答案 1 :(得分:2)

Ms是一个逻辑&&,定义为

and

因此,如果A和B都为真,则(true && true) == true (true && false) == false (false && true) == false (false && false) == false 语句才为真

在您的情况下,使用三元运算符,一些括号可能会有所帮助,因此您可以看到这些运算符的评估顺序。

A && B

所以,用英语......

如果(sex && (sex === "Man")) ? "Mr." : "Ms." 存在且sexsex,则'Man'为其他"Mr."

一般来说,三元运算符的工作方式如下:

"Ms."

答案 2 :(得分:1)

性别未定义且性别为Man然后Mr.;否则Ms.。所以,如果性别未定义;它也是Ms.

答案 3 :(得分:0)

您可以更改

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

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

现在sex === "Man" ? "Mr." : "Ms."告诉你,如果性别变量的值是Man并且两个变量的类型相同(在这种情况下是String),那么它应该返回{{1} } else Mr