var v1 = ('' == '0'); //false
        var v2 = (0 == ''); //true
        var v3 = (0 == '0');  //true
        var v4 = (false == 'false'); //false
        var v5 = (false == '0'); //true
        var v6 = (false == undefined); //false
        var v7 = (false == null); //false
        var v8 = (null == undefined); //true
        var v9 = ('\t\r\n' == 0); //true
        var v10 = (false == 0); //true
        var v11 = (typeof null == 'object'); //true
        var v12 = (typeof NaN == 'number'); //true

解决方案 »

  1.   

    这其中没有任何的BUG
    我昨天晚上还在整理些JS陷阱资料呢。 变量相等性的时候
    /*
    *Boolean类型转换成1或0。即数字型的
    *字符串与数字比较,字符串先转换为数字(哪怕是NaN)
    *对象与字符串比较,对象执行toString()
    *对象与数字比较,对象尝试转换为数字
    */
      

  2.   

    有些其实不是bug,是因为你使用==,导致两边的数据进行类型强制转换,才会出现某些bug,所以建议比较的时候使用===进行比较,这样不会进行数据的强制转换,一下是我重新进行的测试:
            var v1 = ('' === '0'); //false
            var v2 = (0 === ''); //false
            var v3 = (0 === '0');  //false
            var v4 = (false === 'false'); //false
            var v5 = (false === '0'); //false
            var v6 = (false === undefined); //false
            var v7 = (false === null); //false
            var v8 = (null === undefined); //false
            var v9 = ('\t\r\n' === 0); //false
            var v10 = (false === 0); //false
            var v11 = (typeof null === 'object'); //true
            var v12 = (typeof NaN === 'number'); //true
      

  3.   

    应该说是js缺陷或陷阱不过===确实比==好用,且脚本也不容易出项bug
      

  4.   

    有趣,不应该是bug!同意
    “有些其实不是bug,是因为你使用==,导致两边的数据进行类型强制转换,才会出现某些bug,所以建议比较的时候使用===进行比较,这样不会进行数据的强制转换,一下是我重新进行的测试:”
      

  5.   

    var v1 = ('' == '0'); //false,正确的,这两个本来就不相等,因为都是字符串
    var v2 = (0 == ''); //true,正确呀,空串会转成0与0比较呀。
    var v3 = (0 == '0');  //true 正确呀,空串会转成0与0比较呀。
    var v4 = (false == 'false'); //false,正确呀,字符串 false 转成boolean型后,就是 true 呀
    var v5 = (false == '0'); //true,对呀,'0'和'' 转成布尔型后都是false
    var v6 = (false == undefined); //false,对呀,未定义,无所谓真假
    var v7 = (false == null); //false,空,也无所谓真假呀。
    var v8 = (null == undefined); //true,对呀,这是规定
    var v9 = ('\t\r\n' == 0); //true,对呀,空白字符转数字后就是0,再与0比
    var v10 = (false == 0); //true,对呀,
    var v11 = (typeof null == 'object'); //true,对呀,null是一个object占位符
    var v12 = (typeof NaN == 'number'); //true,NaN本来就是数字型,但是是一个不存在的数
      

  6.   

    当然是对的啦,你用过C#,C++,C,JAVA之类就知道,等号应当是传递性的,可是javascript就没有,而且是迷惑的。。所以从其他语言转过来 就稍不留心就成了bug。我只是给刚学的或者部分人一个参考,至于用=== 这个当然可以,但是其他语言是没有的,容易走入误区,不是吗?
      

  7.   

    不错的文章。其实并不算bug,对NaN和NULL理解不同。
    null为空,你var个变量不赋值就是一个{},同时也是undefined。
    false编译器预编译就是为0,