求组,请问两个数组的所有内容相同,为何不能相等
代码如下
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