""==0,这个表达式竟然返回 true,百思不得其解呀?
首先,二者不是同一个类型,一个是字符型,一个是数值型,所以js为了比较,会自动转成同一个类型来比较。
但是无论转成字符型,还是数字型,都没有相等的可能呀。
比如全转成字符型
则"" == "0"
空字符“”不可能等于“0”字符呀。
如果都转成数字型也不成立呀,为何会相等呢?

解决方案 »

  1.   

    alert(""==false);
    alert(0==false);
      

  2.   

    参考http://www.imkevinyang.com/2009/07/javascript-%E4%B8%AD%E7%9A%84false%E9%9B%B6%E5%80%BCnullundefined%E5%92%8C%E7%A9%BA%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%AF%B9%E8%B1%A1.html
      

  3.   

    ==这个比较符有强制类型转换
    可以试一试
    alert(1=="1");
    alert(2=="2");//都是true要正确的比较,要用===,这个不带类型转换,既类型和值都一致才返回true
    alert(1==="1");
    alert(2==="2");//都是false
      

  4.   

    在javascript中数字型的0、布尔型的false和字符型的"" 都认为是假值
    表达式""==0 解释为 假值等于假值 自然返回为true
      

  5.   

    alert(0==false)//true
    alert(""==0)//true 
    在firefox下的效果
      

  6.   

    用  ===  就返回false 了
      

  7.   

    原来
    javascript:alert(Number(""));
    返回的是0,
    看来空串可以强制转成数字,就是0.
      

  8.   

    在javascript中数字型的0、布尔型的false和字符型的"" 都认为是假值
    表达式""==0 解释为 假值等于假值 自然返回为true 
    应该是这个说法
      

  9.   

    按照你的说法那3楼的:
    ==这个比较符有强制类型转换
    可以试一试
    alert(1=="1");
    alert(2=="2");//都是true
    ----------------------------------
    那这个怎么解释啊?
      

  10.   

    用假值来解释容易混淆,用强制类型转换来记忆会更简单,更准确而复杂的规则如下在ECMAScript中,等号由双等号(= =)表示,当且仅当两个运算数相等时,它返回true。非等号是感叹号加等号(!=),当且仅当两个运算数不相等时,它返回true。为确定两个运算数是否相等,这两个运算符都会进行类型转换。执行类型转换的基本规则如下:q  如果一个运算数是Boolean值,在检查相等性之前,把它转换成数字值。false转换成0,true转换成1。q  如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字。q  如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串(调用toString()方法)。q  如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字。在进行比较时,该运算符还遵守下列规则:q  值null和undefined相等。q  在检查相等性时,不能把null和undefined转换成其他值。q  如果某个运算数是NaN,等号将返回false,非等号将返回true。重要提示:即使两个运算数都是NaN,等号仍然返回false,因为根据规则,NaN不等于NaN。q  如果两个运算数都是对象,那么比较的是它们的引用值。如果两个运算数指向同一个对象,那么等号返回true,否则两个运算数不等。
    所以,最保险的比较方法是用 === 而不是 ==