返回没有引用的javascript函数

Tao*_*Tao 0 javascript

在下面的代码中,我预计3个日志的结果将是相同的.

但他们不是.

var m = (function () {
  var arr = [
    {a: 1, b: 2}, 
    {c: 3, d: 4}
  ];

  return {
    getArr: function () {
      return arr;
    }
  };
})();

var myArr = m.getArr();

console.log(myArr);

myArr.pop();

console.log(m.getArr());
Run Code Online (Sandbox Code Playgroud)

确保数组不作为引用传递的最佳方法是什么?

return arr.map()吗?

jmc*_*riz 5

JSON.parse(JSON.stringify(arr)) 将为您提供对象或数组的深层副本.

var m = (function () {
  var arr = [
    {a: 1, b: 2}, 
    {c: 3, d: 4}
  ];

  return {
    getArr: function () {
      return JSON.parse(JSON.stringify(arr));
    }
  };
})();

var myArr = m.getArr();

console.log(myArr);

myArr.pop();

console.log(m.getArr());
Run Code Online (Sandbox Code Playgroud)

  • 虽然它在大多数情况下都有效,但是使用这种方法的任何人都应该注意一些事情:**1.**它只适用于JSON可序列化的内容(也就是说,你的数组和对象不能包含函数/方法,也不是"Infinity","null"或"undefined".**2.**它会将`date`值转换为`string`.**3.**这是非常低效的.也就是说,如果您的数组很小(相对而言)并且只包含基元和/或仅包含基元(`string` /`number` /`boolean`)的对象,则此方法将完美地运行. (2认同)