JavaScript shift()方法是否返回元素的引用或副本?

Does JavaScript shift() method returns reference or copy of the element?

本文关键字:引用 副本 元素 返回 shift 方法 是否 JavaScript      更新时间:2023-09-26

假设我有三个对象声明如下:

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变量吗?

答案:它是元素的(副本)。但是元素是什么呢?与Java一样,JavaScript中的每个值要么是原语,要么是引用(指向对象的指针)。"对象"在JavaScript中不是值。对象只能通过引用(指向对象的指针)来操作。

假设我有这样声明的树对象:

var obj1 = new Car();var obj2 =新车();var obj3 = new Car();

我把它们放到数组 中

。实际上,您有三个引用(指向对象的指针),它们指向您创建的对象。你把这些引用放到数组中。

firstElement是对obj1的引用还是它的副本?例如如果我改变firstElement的一些属性,它会影响obj1吗变量?

firstElement是参考obj1的副本。如果你改变了firstElement所指向的对象的某些属性,那么当然可以通过obj1看到它,因为它们指向同一个对象。

作为参考,请查看以下示例:

http://jsfiddle.net/3wntu/1/

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;