为什么三元(“0” ? “yes” : “no”) 在 javascript 中会返回 “yes”

Why would ternary ("0" ? "yes" : "no") return "yes" in javascript?

本文关键字:yes 返回 javascript no 三元 为什么      更新时间:2023-09-26
之前

可能有人问过,但我找不到。我也阅读了规格,没有看到任何可以解释为什么"0"评估为true的奇怪之处.

那么"0" ? "yes" : "no"为什么要返回yes呢?

("0"==true) ? "yes" : "no"按预期工作。

非空字符串是真实的。 "0"不是0.

但是,比较会将0强制为一个数字。

请注意,在比较过程中唯一可以强制true的字符串是 "1" 。(如果我缺少边缘情况,请告诉我!

"true" == true // false
"foo"  == true // false
"0"    == true // false
"1"    == true // true

如果字符串至少有一个字符,则该字符串的计算结果将为 truey。因此,您的第一个示例将返回"yes"。

但是,如果您使用了类似以下内容的内容,它将返回 no:

"" ? "yes" : "no" // this evaluates to "no" since an empty string is considered falsey

这是 javascript 中类型强制发生的直接结果。我鼓励您查看以下链接,以获取有关什么是类型强制及其工作原理的更多信息: 类型强制