我理解三元运算符本质上是if-else
语句的快捷方式,我也理解&&
是逻辑AND。但是,我不明白这两者是如何组合在下面的代码中的。
我也尝试过输出,但它并没有帮助。我如何解释以下内容?
function greetUser(customerName, sex) {
var salutation = sex && sex === "Man" ? "Mr." : "Ms.";
console.log("Hello, " + salutation + " " + customerName);
}
答案 0 :(得分:3)
通常,三元运算符意味着:
condition ? (value returned if condition is true) : (value returned if condition is false)
在您的示例中,条件为sex && sex === 'Man'
,这意味着变量sex
中包含的值为 truthy和strictly 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}}。
简单来说,在比较===
之前,使用==
首先将两个项强制转换为相同的类型。 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."
存在且sex
为sex
,则'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
。