本帖最后由 hoyche 于 2014-08-21 13:36:30 编辑

解决方案 »

  1.   

    变量是普通类型可以if(xxx),是对象不能这样判断
      

  2.   

    看下有len or count 没 判断下
      

  3.   

    空数组属于比较特殊的玩意var a = [];
    alert(~a); // -1
    alert(+a); // 0
    alert(++a); // 1
    alert(!a); // falsehttp://www.iteye.com/topic/947149 这里有说明
      

  4.   

    javascript不是那么好学的,不可以用猜想去解释,要看实际效果。
      

  5.   

    {} 是一个内部方法、属性没有内容的对象,不是空对象,空对象应该是 null
    对象无法用强制转换类型的
      

  6.   

    var arr=[],obj={};
    if(arr)
    console.log(1);
    if(obj)
    console.log(1);
    变量arr和obj是真实存在的,所以会是打印内容。而数组arr的长度为0,所以也会打印。obj==0肯定会打印false的。因为obj是一个对象。
      

  7.   

    空数组和空对象也是Object是Object,在转换成布尔值时就是 true在用==比较时会对数组先进行类型转换。空数组可以转换成空字符串""。空字符串又可以转换成0
      

  8.   

    For more information, please refer to <JavaScript-The Definite Guide> to get all you want to know. 
      

  9.   

    +0 、-0、""、null、undefined、false、NaN 这7个值是假值,其他所有的值都为真值。
    == 比较是值的比较 arr == 0;是arr的值和0比
     例:[2] == 2 也是true
      

  10.   

    等号比较的时候会转换类型 [] == 0。而全等比较的时候,则不会转换。[] === 0
    http://www.cnblogs.com/simayixin/archive/2011/03/21/1990831.html
    0==[]
    然后[]专为"",式子专为0==“”
    然后""转为0,式子专为0==0
    所以[]==0得到true
      

  11.   


    如果浏览器开发商想让 {}==0 返回true,到时候大家又会说,{}中没有自定义的属性,所有{}==0应该返回true。类似这样的问题,不存在对于错的问题,而是是否遵循惯例的问题。提供的东西是否直观的问题。对于我来说,这些语法都是垃圾,只是为新手挖了更多的坑而已,试想程序员用arr==0他想表达什么,这种动机本身就有问题,意图不确定。如果你想判断数组是否为空,应该用arr.length===0判断。
      

  12.   

    不要纠结那些垃圾语法细节,如果浏览器给你提供一个bug,你还问为什么是个bug,有什么意义。重要的是知道bug的存在后,避免触发那些bug。
      

  13.   

    首先没有 空对象 
    其次
    console.log(arr==0)   无业务场景适用的代码  不要写
    什么时候你会让  数组  和 数字 去比较呢?应该不会吧
    if(表达式)  只要表达式结果存在 不是0 不是false