【发布时间】:2012-07-06 23:57:49
【问题描述】:
MDC describes the == operator as follows:
如果两个操作数的类型不同,JavaScript 会转换操作数,然后应用严格比较。如果任一操作数是数字或布尔值,则尽可能将操作数转换为数字;否则,如果任一操作数是字符串,则尽可能将另一个操作数转换为字符串。
考虑到这一点,我将评估"true" == true 如下:
- 它们是同一类型吗? 没有
- 操作数是数字还是布尔值? 是的
- 我们可以将两者都转换为数字吗? 否 (
isNaN(Number("true")) // true) - 任一操作数都是字符串吗? 是的
- 我们可以将另一个操作数转换为字符串吗? 是的 (
String(true) === "true" // true)
我得到了字符串 "true" 和 "true",它们的计算结果应该为 true,但 JavaScript 显示为 false。
我错过了什么?
【问题讨论】:
-
有这么多 JavaScript,世界是一个可怕的地方:
if("true" == true) {console.log("yes")} else {console.log("no")}; if("true") {console.log("yes")} else {console.log("no")}---> "no yes" -
我得说,我很惊讶,发生这种情况真是太愚蠢了。始终始终使用 === 的另一个原因
-
@user1068352 检查混乱 :) dorey.github.io/JavaScript-Equality-Table
标签: javascript string equals