JavaScript shift()方法是否返回元素的引用或副本?
Does JavaScript shift() method returns reference or copy of the element?
假设我有三个对象声明如下:
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;
相关文章:
- 引用对象中的通用值
- 如何在JavaScript中将字符串转换为函数引用
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 在动态创建的元素上获取对特定选择器的引用
- IIFE中的函数引用不可用
- 如何通过引用var Using DataTables来进行分页或排序
- 如何在创建键时引用来自同一对象的键
- Datatables:通过DOM数据源中的名称引用列
- 自引用回调
- 引用类变量中的原型方法
- 无法获取属性'selectedIndex'的未定义引用或null引用
- Vanilla JS通过引用移除数组元素
- 通过引用传递JavaScript对象
- 无法获取属性'Id'使用Knockout.js的未定义或空引用API
- "“;变量未引用正确的对象
- 获取对使用Tampermonkey使用javascript创建的元素的引用
- 闭包而不是引用的副本
- 需要帮助创建3个副本's,而不是引用(就像它当前所做的那样)
- 我应该有我的网页引用的jquery.js在我自己的服务器或从code.jquery.com的副本
- JavaScript shift()方法是否返回元素的引用或副本?