注意,在js中,数组为引用类型,比较两个数组是否相同,其实是比较两个数组的内存地址是否相同。+
用‘==’、‘===’比较数组时,是要比较数组的 内存地址是否相同的。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>数组的比较以及== 和 ===</p>
<script>
// type1
var a=[],b=[];
console.log(a==b);//false
console.log(a===b);//false
// a、b数组不是指向同一个内存地址
//type2
var c=[];
var d=c;
d[0]=1;
console.log(c[0]);//1
console.log(c==d);//true
console.log(c===d);//true
// c、d完全相同,一个改变时另一个也会相应改变
// type3
var m=['x','y','z'];
var n=[];
for(var i=0 ;i<m.length;i++){
n[i]=m[i];
}
console.log(m);//['x','y','z']
console.log(n);//['x','y','z']
console.log(m==n);//false
console.log(m===n);//false
// m、n元素和属性完全相同,但是不指向同一个内存地址,相互独立,一个改变时另一个也不会改变
function equalArrays(m,n){
if(m.length!=n.length){
return false;
}
for(var i=0;i<m.length;i++){
if(m[i]!=n[i]){
return false;
}
return true;
}
}
console.log(equalArrays(m,n));//true
// 这个比较并没有比较内存地址
</script>
</body>
</html>