JavaScript对象比较

时间:2010-10-15 15:33:42

标签: javascript

为什么最后=====运算符在此处返回true?

var object1 = {value: 10};
var object2 = object1;
alert(object1 == object2); // result makes sense

object2.otherValue = 15;
alert(object1 == object2); // doesn't make intuitive sense to me
alert(object1 === object2); // neither does this

3 个答案:

答案 0 :(得分:2)

在第三行,您将object1和object2设置为引用相同的对象。整个程序中只存在一个对象。

因此,第5行的赋值改变了该单个对象的值;换句话说,object1.otherValue === 15在运行该行之后为真,即使您通过对它的不同引用更改了对象。

因此,为什么等式检查仍然是正确的,因为object1 object2,当然它等于它自己。

答案 1 :(得分:1)

分配这样的对象时:

var object2 = object1;

您实际上正在分配对象的引用。只有一个对象,现在有两个引用它。任何更改都可以通过引用看到,因为它们指的是相同的东西。

如果要创建原始对象的副本或克隆,JavaScript没有内置的方法来执行此操作。 (编写自己的内容并非易事,并且已多次在Stack Overflow上讨论过:https://stackoverflow.com/search?q=javascript+clone+object

答案 2 :(得分:0)

执行var object2 = object1;时,您没有创建object1的副本,而是创建对它的引用。 object2现在指的是与object1相同的内存。

因此,您在任何一个中所做的任何更改都将反映在另一个中。