数组/对象按值复制/按引用复制
Array/Object copy by value/copy by reference mystery
我正在Google Apps Script/JS项目上工作,由于某种原因,当我尝试使用Object.create()方法复制对象数组时,我得到了意想不到的行为。下面是相关的代码片段,当函数结束时…即使第二个形参正确传入,原始的对象数组也会被修改。
WebConfigParser.prototype.compareWith = function(array_of_objs, parameter_flag)
{
var safe_array_of_objs = [];
var array_of_objs_to_touch;
if(parameter_flag)
{
if(parameter_flag === "passbyval")
{
for(var i = 0; i < array_of_objs.length; i++)
{
safe_array_of_objs.push(Object.create(array_of_objs[i]));
}
array_of_objs_to_touch = safe_array_of_objs;
}
}
else
{
array_of_objs_to_touch = array_of_objs;
}
///more code happens here...but i'm always referring to "array_of_objs_to_touch"
}
要获取单维数组的深度拷贝,可以使用 array .slice()
var a=[1,2,3],
b=a.slice(), //deep copy
c=a;
a[1]=3;
console.log(a,b,c)
相关文章:
- 在javascript/angular中创建播放列表(按值复制数组,但按引用设置嵌套对象)
- Javascript函数 - 通过引用复制,但这里发生了什么
- 复制不带属性的函数引用
- 引用被分配给哪些类型,而不是在Javascript中被复制
- 在Javascript中使用新的引用创建一个新对象 - 不要复制或克隆 -
- 具有嵌套数组的绝对无引用的数组复制
- Angular/Javascript:按值复制一个简单的数字而不引用
- Angular.copy() 不是深度复制引用的数组
- 对于 JavaScript 的继承,引用或复制父级的原型是否更好
- 如何通过引用将JavaScript对象复制到新变量NOT
- 我应该从bower_components复制文件吗?在那里引用它们
- 多次循环引用对象,将其属性复制到Javascript/Angularjs中的其他对象
- Object.创建数组和对象属性的复制引用
- 通过值或引用复制/传递js中的函数
- 当通过引用而不是按值复制 JavaScript 值时,是否有任何经验法则
- Javascript:如何正确复制引用
- 通过引用复制对象是否有实际用途
- 自动复制index.html中的引用到karma.conf.js中
- 复制DOM节点jQuery(非引用)
- 尝试在JavaScript中复制引用传递行为:如何适当地修改我的代码