日期:2014-05-16  浏览次数:20477 次

求组,请问两个数组的所有内容相同,为何不能相等
代码如下
JScript code

<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后的值都相同
为什么两者却不能等价
求详细解释

------解决方案--------------------
你就是去new两个空的数组,这也不会相等的,它们是各自的内存空间。

如果你这两个数组都相等了,那我改变其中一个数组的值,另外一个也会跟着变的。。这样程序就乱了,如果想更深的再了解这个。研究浏览器的内核吧。
------解决方案--------------------
相等判断的是内存地址,一般比较两个相同的话可以试试 equals,但是一般建议重写equals方法
------解决方案--------------------
双胞胎的2个人,无论性别,生日,甚至基因都完全相同。那你能说他们是相等的么

只能说他们是拥有相同属性的2个个体而已,

同样返回到代码中的意思就是,
这是2个个体,但是他们拥有了相同的属性值
------解决方案--------------------
数组是引用类型 引用类型的==是判断这两个数据的内存地址是否相同,而非他们的值相等的
------解决方案--------------------
if (myData.toString() == myData0.toString()) alert("YES"); else alert("NO");
------解决方案--------------------
toString() 相当于返回 对象的刻度

基本上 相同的内容 相同的刻度
------解决方案--------------------
楼主先 了解 对象 引用类型 值类型
------解决方案--------------------
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