3

可能重复:
为什么 `null >= 0 && null <= 0` 而不是 `null == 0`?

所有假设都是真的:

alert( "null==undefined:  " + (null == undefined) )
alert( "null==0:          " + (null == 0) )       // why false??
alert( "false=='':        " + (false == '') )
alert( "true==1:          " + (true == 1) )
alert( "true=='1':        " + (true == '1') )
alert( "'1'==1:           " + ('1' == 1) )

所有假设都是错误的:

alert( "null===undefined:  " + (null === undefined) )
alert( "null===0:          " + (null === 0) )  
alert( "false==='':        " + (false === '') )
alert( "true===1:          " + (true === 1) )
alert( "true==='1':        " + (true === '1') )
alert( "'1'===1:           " + ('1' === 1) )

为什么 (null == 0) 为假

我使用最后一个 chrome 来测试它。

4

1 回答 1

3

类型与null类型并不能真正进行比较number,因此比较算法返回false. 从规范(省略关联案例):

  1. 如果类型相等,则使用特定于类型的比较。
  2. null == undefinedtrue
  3. 数字和字符串作为数字比较,字符串被转换
  4. 如果比较布尔值,则将其转换为数字并再次比较
  5. 如果将数字或字符串与对象进行比较,则将对象转换为基元并再次进行比较 - 不,Type(null)Null,不是对象(如在typeofoperator中)。
  6. 对于其他一切,return false.
于 2013-01-04T20:27:58.037 回答