在我看来,这个问题与This question无关,我只是想了解javascript内核的一些行为,我不想要一个库之类的东西。
我正在尝试理解为什么这段代码实际上修改了const originalArray
const originalArray = [0, 2, 1, 1, 1];
var newArray = originalArray;
var removed = newArray.splice(0,3);
console.log(originalArray);//return [ 1, 1 ]
但同时这是不可能的:
const originalArray = [];
originalArray = [1];
那么,我如何在没有库的情况下创建一个真正不可变的数组呢?
发布于 2018-05-31 23:43:31
您可以使用Object.freeze
来实现这一点。
const arr = Object.freeze([1, 2, 3]);
console.log(arr);
arr[1] = 7;
console.log(arr);
发布于 2018-06-01 00:47:52
const不是像你想的那样创建一个常量变量,它创建的是不可变的绑定。如果你写const arr = [],然后arr = {},你会得到错误。即使是Object.freeze也只冻结顶层。例如:
const x = Object.freeze([1, 2, 3, [3, 4, 5]]);
x[3].push(20);
console.log(x)
你会得到[ 1,2,3,3,4,5,20 ],如果你想让它完全不可变,你必须递归地冻结它,但这会影响性能。您还可以像这样创建数组的副本,并使用新的
const x = [1,2,3,4,5]
const y = x.slice(0, x.length)
https://stackoverflow.com/questions/50628071
复制相似问题