javascript - 复制或切片数组与创建与现有变量相等的变量有什么需要?
问题描述
let a = {"foo": 99};
let b = a;
// console.log(b) {"foo": 99}
a.foo = 33;
// console.log(b) {"foo": 33}
我在上面的场景中了解到,如果我使用对象,引用原始对象的变量将反映原始对象的值。
但是如果我用数组这样做:
let a = [1,2,3];
let b = a;
a = [99,99,99];
// console.log(b) [1,2,3];
即使更改后变量b
仍然引用原始值,那么通过服务创建副本的人会怎样?a
a
slice()
解决方案
这是因为,通过这样做a = [99, 99, 99]
,您正在创建一个全新的对象,并“重置” a
。但是在这样做时a.foo = 33
,您正在修改现有对象和对它的引用。
你可以看到,当我设置a[0]
而不是a
,b
仍然等于a
:
let a = [1, 2, 3];
let b = a;
a[0] = [99, 99, 99];
console.log(b);
使用该slice()
方法时,b
保留a
的原始值。
例子:
let a = [1, 2, 3];
let b = a;
a = a.slice(2);
console.log(a, b);
推荐阅读
- javascript - 有没有办法从网站的源代码以编程方式运行 javascript 函数
- spring-boot - 带有 gmail SMTP 的 JavaMail - 如何处理不存在的电子邮件地址
- javascript - 如何在我的 div 中有一个滚动条而不是在我的窗口中?
- git - 为什么即使在 git 上合并 2 个分支后 2 个文件也不同?
- python - 用于从 S3 下载文件的模拟 boto3 响应
- typescript - 如何在 typescript 中公开 API 返回的类型
- sql-server - 是否有任何理由同时使用具有增量 PK SerialID 的非集群 36 NVARCHAR id?
- laravel - 通过不同命名路由调用的视图文件中的链接
- reactjs - 不同选定数组的可重用 React Map 方法
- javascript - 在不使用标签的情况下突出显示输入表单中的某些单词?