为什么最后==
和===
运算符在此处返回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
答案 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相同的内存。
因此,您在任何一个中所做的任何更改都将反映在另一个中。