所有文字都在标题中。我的意思是23
和true
都是真的,对吗?因此,在松散比较运算符==
下,为什么它们不相等?当需要精度时,有精确的比较运算符===
。
编辑:我想在评论中我们同意这是规范中的一些反直觉的错误。
答案 0 :(得分:11)
在第一种情况下,true
的类型转换为数字 1
,并与23
进行比较。显然1 != 23
即使1
和23
都评估为true
。
在第二部分中,!23
评估为false
,然后!false
评估为true
,即== true
。
诀窍是类型转换从boolean
变为numeric
,即使它应该直观地反过来。
答案 1 :(得分:1)
当你将数字与布尔值进行比较时,它会将布尔值转换为数字1。
比较x == y,其中x和y是值,产生true或false。这样的比较如下进行:
- 如果Type(y)是布尔值,则返回比较结果x == ToNumber(Y)。
醇>