学习JS遇到一个问题:
var arr1 = ['a','b','c']; 
var arr2 = ['a','b','c']; 
alert(arr1.toString() === arr2.toString()); 
alert(typeof(arr1.valueOf()));
alert(typeof(arr2.valueOf()));alert(arr1.valueOf() == arr2.valueOf());  //false
alert(arr2.valueOf());
alert(arr1.valueOf() === arr2.valueOf()); //falsevalueOf() 方法返回 Array 对象的原始值。
原始值不是返回的是a,b,c吗.
arr1.valueOf()与arr2.valueOf()为什么不相等?

解决方案 »

  1.   

    俩个对象没法比较哇
    arr1.valueOf().toString()
      

  2.   

    alert(typeof(arr1.valueOf()));//object
      

  3.   

    试一下这个
    alert( arr2===arr2.valueOf() );
      

  4.   

    额..
    alert( arr2===arr2.valueOf() ); //true
    这样的话,数组的valueOf()返回的还是数组本身了?但是
    var a = new String('aa');
    var b = new String('aa');
    alert(a.valueOf() == b.valueOf());//true
    alert(a.valueOf() === b.valueOf());//true
    这两个是字符串对象,为什么却可以进行比较呢.
      

  5.   

    String对象调用valueOf()方法后返回的是字符串值。 
      

  6.   


    var arr1 = ['a','b','c'];  
    var arr2 = ['a','b','c'];  
    alert(arr1.valueOf());
    alert(arr2.toString());
    alert(arr1.valueOf()==arr2.valueOf());
    alert(arr1.toString()==arr2.toString());
      

  7.   

    综合起来有正解了。
    数组的valueOf返回数组本身,数组之间的相等比较的不是toString的相等,而是比较的内存地址,所以两个数组不相等。
    然后string类型的valueOf返回的还是string,string跟number是一样的,是基本类型,比较的只是值相等。
    恩,都是楼上说的,我总结下。。