假设我有这样的树对象声明:
var obj1 = new Car();
var obj2 = new Car();
var obj3 = new Car();
我将它们放在一个数组中
var myArray = [];
myArray.push(obj1);
myArray.push(obj2);
myArray.push(obj3);
最后,如果我这样做:
var firstElement = myArray.shift();
这让我想知道:
firstElement 是对 obj1 的引用还是它的副本?例如,如果我更改 firstElement 的某些属性会影响 obj1 变量吗?
答案 0 :(得分:1)
答案:这是元素的(副本)。但是元素是什么?与Java类似,JavaScript中的每个值都是基元或引用(指向对象的指针)。 “对象”不是JavaScript中的值。对象只能通过引用(指向对象的指针)进行操作。
假设我有这样的树对象声明:
var obj1 = new Car(); var obj2 = new Car(); var obj3 = new Car();
我将它们放在一个数组中
没有。实际上,您有三个引用(指向对象的指针),指向您创建的对象。您将这些引用放在数组中。
firstElement是对obj1的引用还是它的副本?例如 如果我改变firstElement的某些属性会影响obj1 变量?
firstElement
是obj1
的副本,是一个参考。如果更改firstElement
指向的对象的某些属性,那么当然可以通过obj1
看到它,因为它们指向同一个对象。
答案 1 :(得分:-1)
参考,请查看此jsfiddle以获取证据:
HTML:
<div >Shifted obj title: <span id='display1'></span></div>
<div >firstObj title: <span id='display2'></span></div>
<div >obj1 title: <span id='display3'></span></div>
JS:
var myArray = [],
firstElement = {},
obj1 = {title:'obj1'},
obj2 = {title: 'obj2'},
obj3 = {title: 'obj3'};
myArray.push(obj1);
myArray.push(obj2);
myArray.push(obj3);
firstElement = myArray.shift();
document.getElementById("display1").innerHTML = firstElement.title;
//change the objects name
firstObj.title = "firstElement";
//output the reference object title
document.getElementById("display2").innerHTML = firstElement.title;
//output the original output - should be the same as the altered reference title
document.getElementById("display3").innerHTML = obj1.title;