代码如下<script language="javascript">
var myData0 = new Array([3,466.55],[5,155.52]);
                vat str = '3,466.55|5,155.52';
alert(str);
var myData = str.split('|');

alert(myData);
alert(myData0);
alert(myData.join("|"));
alert(myData0.join("|"));
if (myData.join("|") == myData0.join("|")) alert("YES"); else alert("NO");

for (i=0; i<myData.length; i++){
alert(myData[i]);
alert(myData0[i]);
if (myData[i] == myData0[i]) alert("YES"); else alert("NO");
// myData[i] = myData[i].replace('=',',');
// alert(myData[i]);
}

alert(typeof(myData));
alert(typeof(myData0));
if (typeof(myData) == typeof(myData0)) alert("YES"); else alert("NO");
if (myData == myData0) alert("YES"); else alert("NO");
</script>
myData0是直接赋值的数组
myData是经过对字符串split操作后生成的数组
经过详细调试,这两个数组类型,值,以及join后的值都相同
为什么两者却不能等价
求详细解释

解决方案 »

  1.   

    你就是去new两个空的数组,这也不会相等的,它们是各自的内存空间。如果你这两个数组都相等了,那我改变其中一个数组的值,另外一个也会跟着变的。。这样程序就乱了,如果想更深的再了解这个。研究浏览器的内核吧。
      

  2.   

    相等判断的是内存地址,一般比较两个相同的话可以试试 equals,但是一般建议重写equals方法
      

  3.   

    if (myData.toString() == myData0.toString()) alert("YES"); else alert("NO");
      

  4.   

    toString() 相当于返回 对象的刻度基本上 相同的内容 相同的刻度
      

  5.   

    if (typeof(myData) == typeof(myData0)) alert("YES"); else alert("NO");
    你这句是将数组转换成类型了,所以能比较,返回YES
    if (myData == myData0) alert("YES"); else alert("NO");
    你这句是直接将数组进行比较,因为数组是Object类型,而Object类型是不能比较的,所以返回NO。
    还有你的vat str = '3,466.55|5,155.52';写错了,不是vat,是var
      

  6.   


    谢谢大家的解答,明白这个原因了
    即便他们内存地址不同,但他们的内容是一样的,为什么我的程序在运行调用这两个数组的函数时,会产生不一样的结果,直接赋值的myData0是正常的,而调用myData时总是报错wrong format, 难道split生成的myData不是数组么
      

  7.   


    多谢大家的热心解答
    原因我用toSource()方法找到了,问题也解决了
    直接赋值的myData0是一个二维数组
    而split切出来的是一维数组