为什么三元 ("0" ? "yes" : "no") return "yes" 在 javascript 中?
Why would ternary ("0" ? "yes" : "no") return "yes" in javascript?
之前可能有人问过,但我没找到。我也读了 specs,没有看到任何奇怪的东西可以解释为什么 "0"
评估为 true
。
那么为什么会 "0" ? "yes" : "no"
return yes
?
("0"==true) ? "yes" : "no"
按预期工作。
非空字符串为真。 "0"
不是 0
。
但是,比较会将 0
强制转换为数字。
请注意,在比较 期间,唯一可以强制转换为true
的字符串是"1"
。 (如果有遗漏的边缘情况,请告诉我!)
"true" == true // false
"foo" == true // false
"0" == true // false
"1" == true // true
如果一个字符串至少有一个字符,则该字符串的计算结果为真。因此,您的第一个示例将 return "yes".
如果您使用了类似下面的内容,那么它将 returned no:
"" ? "yes" : "no" // this evaluates to "no" since an empty string is considered falsey
这是 javascript 中类型强制发生的直接结果。我鼓励您查看以下 link 以获取有关什么类型强制转换及其工作原理的更多信息:Type Coercion
之前可能有人问过,但我没找到。我也读了 specs,没有看到任何奇怪的东西可以解释为什么 "0"
评估为 true
。
那么为什么会 "0" ? "yes" : "no"
return yes
?
("0"==true) ? "yes" : "no"
按预期工作。
非空字符串为真。 "0"
不是 0
。
但是,比较会将 0
强制转换为数字。
请注意,在比较 期间,唯一可以强制转换为true
的字符串是"1"
。 (如果有遗漏的边缘情况,请告诉我!)
"true" == true // false
"foo" == true // false
"0" == true // false
"1" == true // true
如果一个字符串至少有一个字符,则该字符串的计算结果为真。因此,您的第一个示例将 return "yes".
如果您使用了类似下面的内容,那么它将 returned no:
"" ? "yes" : "no" // this evaluates to "no" since an empty string is considered falsey
这是 javascript 中类型强制发生的直接结果。我鼓励您查看以下 link 以获取有关什么类型强制转换及其工作原理的更多信息:Type Coercion