alert([]==![]); true还是false 说下原因

解决方案 »

  1.   


    alert( [] )
    alert( ![] )
    alert([] == ![]);
    这样就明白了
      

  2.   

    alert( typeof([]) )
    alert( typeof(![]) )
      

  3.   

    alert([]==[]) // false
    alert({}=={}) // false
    ?
    var a = new Object()
    var b = new Object()
    alert(a==b)
    明白?
      

  4.   

    比较运算的类型转换规则和强制类型转换的规则是不同的
    强制类型转换的规则是所有对象都转换成true,而![]是将空数组进行强制类型转换成布尔值再取反,空数组又是对象的一种,所以![]最终的值是false
    比较运算的转换规则是在运算符两边的表达式类型不同时会进行转换,并且会将对象转换成字符串(即调用对象的toString方法),而从上面我们知道[] == ![]我们可以等价转换成[] == false,[].toString()的结果是空字符串,空字符串==false的结果自然是true
      

  5.   

    贴段代码有助于你理解 alert([] == ![]); // true
    alert({} == !{}); // false
    alert({} == "[object Object}"); // true
      

  6.   

    上面敲错了。。alert([] == ![]);    // true
            alert({} == !{});    // false
            alert({} == "[object Object]");    // true