js 0==''

开发中,遇到了一个bug,0=='', 竟然返回true
百度了一圈,发现解释的都是错的。又翻了下高程那本书。不同类型的==,遵循以下基本规则:

  • 一个值是bool,比较前,false转成0, true转成1

  • 一个值是字符串,另一个是数字,比较前字符串转成数字

  • 一个值是对象,另一个不是,则调用对象的valueOf方法,用得到的基本类型值按照上面的两条规则比较

  • null和undefined是相等的

  • 比较相等之前,null和undefined不能转换成其他任何值

  • NaN和任何值都不相等,包括NaN

  • 如果两个操作数都是对象,则比较他们是否指向同一个对象,是就true,否就false

以下是几个容易出错的例子

null == undefined  true
"NaN" == NaN  //false
NaN == NaN  //false
false == 0  //true
0 == ''  //true
1==true  //true
1 == '1' //true
null ==0 //false
undefined==0 //false

再回到0==‘’上
根据前面的规则,需要先把字符串转先成数字, ''怎么转成数字呢。我一开始以为用parseInt,实际上是用Number(''),结果是0
也就是0 == 0,返回true

看来今后开发,最好都用===,除非你是特意使用==的特性。

你可能感兴趣的:(js 0=='')