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

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

本文关键字:三元 运算符 何理解 逻辑和      更新时间:2023-09-26

我知道三元运算符本质上是if-else语句的快捷方式,我也知道&&是逻辑and。然而,我不明白在下面的代码中这两者是如何结合在一起的。

我也试着摆弄输出,但无济于事。我该如何解释以下内容?

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

通常,三元运算符的意思是:

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

在您的示例中,条件是sex && sex === 'Man',这意味着变量sex中包含的值是truthy,并且严格等于字符串"Man"

以下是分类:

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

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

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

解释:当使用&&时,两个操作数都被强制为布尔值,因此它们的"真实性"可以是AND-ed。例如,假设sex = 'Man',那么你的条件基本上是:

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

被迫布尔值的是:

if(true && true)

这显然是多余的。阅读有关JavaScript类型强制的更多信息。

在使用非严格比较运算符(如==<>。。。而不是CCD_ 13。

简单地说,使用==首先将两个项目强制为相同的类型,然后再进行比较,这可能会导致错误。如果类型不同,使用===会立即返回false,因此更安全。

下面是另一个用于JavaScript比较的有用资源。

&&是逻辑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)

是性没有定义,性是Man,然后是Mr.;否则为CCD_ 27。所以在性别不明确的情况下;它也将是CCD_ 28。

您可以更改行

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

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

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