题目描述
《JavaScript权威指南》【3.7不可变的原始值和可变的对象引用】部分,提到
对象的比较并非值的比较:即使两个对象包含同样的属性及相同的值,他们也是不相等的。
这个我觉得理解没问题,因为不是在一个内存里面,都是互相独立的。给的示例:
var o={x:1},p={x:1}; //具有相同属性的两个对象
o===p //=>false:两个单独的对象永远不相等
var a=[],b=[]; //两个单独的空数组
a===b //=>false; 两个单独的数组永不相等
数组也是对象,而且都是单独声明的。
但是到后面的一个函数我就困惑了:
function equalArrays(a,b){
if(a.length!=b.length)return false; //两个长度不同的数组不相等
for(var i=0;i<a.length;i++){ //循环遍历所有元素
if(a[i]!==b[i]) return false; //如果有任意元素不等,则数组不相等
return true; //否则他们相等
}
}
对象相等应该是对象标识符的引用指向的是同一个内存地址吧?
即使用“=”方式让两个对象相等。
上面的例子只是判断了对象的“键值”对是一致的,不能证明a和b指向的是同一个内存地址啊?
上文都说了
而这段函数的作用是
这个比较就不是要比较2个对象是否指向同一个内存了,而是要比较2个对象的属性或元素是否一致。
实际编程中我们判断2个数组或对象是否一致极少是为了要判断是否指向同一内存,大多数仅要判断属性或元素是否一致而已