数组/对象按值复制/按引用复制

Array/Object copy by value/copy by reference mystery

本文关键字:复制 引用 数组 对象      更新时间:2023-09-26

我正在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)