2016-01-13 64 views
1

我知道三元运算符本质上是一条if-else语句的快捷方式,我也明白&&是一个逻辑AND。但是,我不明白如何将这两者结合在下面的代码中。如何理解这个逻辑和三元运算符的例子?

我试着玩弄输出,但它没有帮助。我如何解释以下内容?

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

回答

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

这truthy检查是在使用非严格的比较操作符,如==<> ...相反===时发生其他情况良好的安全检查。

简而言之,使用==先将两个项目强制转换为相同类型,然后再比较哪一个可以得到lead to bugs。如果类型不同,使用===立即返回false,因此它更安全。

这里是一个用于JavaScript比较的another useful resource

+0

但为什么是所有需要的第一个“性”?为什么不只有三元操作符?我没有看到第一个“性”提供了什么目的。 – AlanH

+0

@AlanH查看我的编辑 – nem035

1

是性不是未定义和性别是Man然后Mr.;其他Ms.。所以如果性别不明确,它也会是Ms.

0

可以更改线

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

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

现在sex === "Man" ? "Mr." : "Ms."告诉你,如果性变量的值是Man和两个变量的类型相同(即字符串在这种情况下),那么它应该返回Mr否则Ms

2

&&是定义为一个逻辑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) 
+0

所以第一个'sex'只是为了检查参数是否非空?那为什么不用'!sex'呢? – AlanH