为什么(23 == true)为假但(!! 23 == true)为真?毕竟有===进行精确比较

时间:2015-01-26 11:26:57

标签: javascript

所有文字都在标题中。我的意思是23true都是真的,对吗?因此,在松散比较运算符==下,为什么它们不相等?当需要精度时,有精确的比较运算符===

编辑:我想在评论中我们同意这是规范中的一些反直觉的错误。

2 个答案:

答案 0 :(得分:11)

在第一种情况下,true的类型转换为数字 1,并与23进行比较。显然1 != 23即使123都评估为true

在第二部分中,!23评估为false,然后!false评估为true,即== true

诀窍是类型转换从boolean变为numeric,即使它应该直观地反过来。

答案 1 :(得分:1)

当你将数字与布尔值进行比较时,它会将布尔值转换为数字1。

  

比较x == y,其中x和y是值,产生true或false。这样的比较如下进行:

     
      
  1. 如果Type(y)是布尔值,则返回比较结果x ==   ToNumber(Y)。
  2.   

http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3