当然不是相等的。
原因:对象的比较并非值得比较:即使两个对象包含同样的属性及相同的值,它们也是不相等的各个索引元素完全相同的两个数组也不相等。
var o = {x:1},p = {x:1}; //具有相同属性的两个对象
o === p // => false:两个单独的对象永不相等
var a = [],b = []; //两个单独的空数组
a === b; // => false:两个单独的数组永不相等
我们通常将对象称为引用类型(引用类型),以此来和JavaScript的基本类型区分开来。依照术语的叫法,对象值都是引用(reference),对象的比较均为引用的比较:当且仅当它们引用同一个基对象时,它们才相等。
var a = []; //定义一个引用空数组的变量一
var b = a; //变量b引用同一个数组
b [0] = 1; //通过变量b修改引用的数组
a [0]; // => 1变量a也会修改
a === b; // => true; a和b引用同一个数组,因此它们相等
这段代码第二行只是把数组(或对象)赋值给一个变量,仅仅是赋值的引用值:对象本身并没有复制一次如果想要一个对象或者数组的副本,则必须显式复制对象的每个属性或数组的每个元素。
var a = {'a','b','c','d'};
var b = {};
for(var i = 0; i <a.length; i ++){
b [i] = a [i];
}
所以我们怎么比较两个单独的对象那个或者数组呢?
。根据上一段代码的演示,我们可以想到同样的方法,通过比较它们的属性或者元素,来比较对象或数组请看下面比较两个数组的函数:
function equalArrays(a,b){
if(a.length!= b.length)return false; //两个长度不同的数组不相等
for(var i = 0; i <a.length; i ++)
if(a [i]!== b [i])返回false; //如果有任意元素不相等,则数组不相等
返回true; //否则它们相等
}
注:本文章有部分内容摘自书“JavaScript的权威指南第6版”
如果有错误的地方还请留言,大家一起讨论一下,谢谢!