javascript中的比较运算符==在比较对象时是如何比较的?
首先我们需要知道JS的比较运算符== 在对基本数据类型进行比较时,比较的是数据的"值",而比较运算符在对JS中的对象进行比较时 比较的是"引用",通俗来说 就是看对象 是不是 同一个对象。
这么说 很枯燥,我们上代码 来看看吧。
//我们先来比较 一个变量看看
var a=100;
var b=100;
alert(a==b); //结果肯定是 true
// 现在我们在来 赋值 一下看看 结果
var c=a;
alert(a==c);//同样输出的 true
//我们来修改一下a的值
var a=10;
alert(a);//输出的是10
//在输出一下C 刚刚我们把a的值赋给了C 看看C会不会改变
alert(c);//C输出的依然是100 ,并没有因为a的值的改变而改变 这就是赋值。
了解了赋值 我们再来看看 对象中 是如何赋值的?其实对象的赋值并不能称之为"赋值",而应该称之为"引用"。我们来看看 赋值 和 引用的区别。
var obj1={
name:'小明',
age:'17'
};
var obj2=obj1;//这里我们对 对象OBJ1进行了赋值(引用)。
//我们输出看看
alert(obj1.name);
alert(obj2.name);//这里OBJ1 OBJ2 都成功输出了 name中的小明 证明OBJ2 成功复制了OBJ1
//现在我们 在给OBJ1添加一些数据看看
obj1.sex='男';
alert(obj1.sex);//obj1成功输出 男 正常
alert(obj2.sex);//obj2竟然也成功输出 男 但我们并没有在obj2 添加sex属性,并且是在
//onj1赋值给obj2后,我们才给OBJ1添加了sex这个属性。
这样我们就不难看出,基本数据类型和对象 在赋值中的区别了,再重申一下 对象中的赋值叫做(引用),这里为了写文章方便讲解 一直说的是赋值。
下面我们在用上面的例子 用比较运算符==来比较对象
//防止乱 我就把刚才的注释去掉了,看不明白可以 看上面的一样,有注释。
var obj1={
name:'小明',
age:'17'
};
var obj2=obj1;
alert(obj1.name);
alert(obj2.name);
obj1.sex='男';
alert(obj1.sex);
alert(obj2.sex);
//现在我们知道了 obj2引用了OBJ1 那么我们来进行比较,看看他们一样不一样
alert(obj1==obj2);//很显然 是TRUE,因为OBJ2引用了OBJ1
//我们继续再来比较
var obj3={
name:'小明',
age:'17',
sex:'男'
};//这里我们可以看出OBJ3的属性和属性值 与OBJ1 完全一样 ,我们来进行比较
alert(obj1==obj3);
//obj1==obj3结果尽然是false 是不是很意外?不用意外!因为我们一开始就说过,==比较运算符 在对"对象"进行比较是比较的是引用,而不是属性和属性的值。
转载请标明出处:https://www.dir321.com