为什么三元 ("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