如何理解这个逻辑和三元运算符的例子?
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)
我理解三元运算符本质上是 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)