这是按照我想要的方式工作,但我有点困惑,为什么它有效。
我有两个对象。 将temp对象设置为等于对象A并操纵临时对象。 对象A受到影响。
设置临时对象等于对象B(为什么现在所有三个对象都不相等?) 我操纵临时对象。 对象A不受影响。
var tempObject = {};
var objectA = {A: 1};
var objectB = {A: 3};
$( document ).ready(function() {
tempObject = objectA;
add(tempObject);
console.log(objectA);
tempObject = objectB;
add(tempObject);
console.log(objectA);
function add(arr){
arr.A += 1;
}
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
答案 0 :(得分:5)
当你在JavaScript中处理对象时,它始终是引用的。它类似于C / C ++中的指针。
当您将tempObject
设置为objectA
时,您基本上是说“tempObject现在指向与objectA相同的对象”。因此,如果更改属性为1,则更改两者。
当您将tempObject
设置为objectB
时,您说“tempObject现在指向与objectB相同的对象”。您没有使用此对象更改任何对象,只有哪个对象tempObject
指向。
答案 1 :(得分:3)
当您将tempObject
设置为objectB
时,它将不再是objectA
的引用,现在引用objectB
。因此,当您对tempObject
进行更改时,objectA
不会受到影响,但objectB
会受到影响。