首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >既然const对于在JavaScript中创建一个不可变的数组没有什么用处(我不知道确切的原因),那么创建一个不可变的数组的最好方法是什么呢?

既然const对于在JavaScript中创建一个不可变的数组没有什么用处(我不知道确切的原因),那么创建一个不可变的数组的最好方法是什么呢?
EN

Stack Overflow用户
提问于 2018-05-31 23:40:24
回答 2查看 1.6K关注 0票数 2

在我看来,这个问题与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];  

那么,我如何在没有库的情况下创建一个真正不可变的数组呢?

EN

回答 2

Stack Overflow用户

发布于 2018-05-31 23:43:31

您可以使用Object.freeze来实现这一点。

const arr = Object.freeze([1, 2, 3]);
console.log(arr);
arr[1] = 7;
console.log(arr);

票数 3
EN

Stack Overflow用户

发布于 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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50628071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档