javascript - Javascript:为什么对象赋值中的“=”运算符会创建对现有对象的引用?
问题描述
我正在做以下事情:
let obj = {
a: 'Hi',
}
let copy = obj;
copy.a = 3;
console.log(obj.a);
令我惊讶的是, 的值obj.a
也是3
。有谁知道为什么会发生这种情况以及如何解决它?
解决方案
原始类型作为值传递,如 Booelan、String、Numbers。
对象类型作为引用传递,如 Array、Function 和 Object
您可以使用 Object.assign(),它在文档中指出:Object.assign() 方法用于将所有可枚举的自身属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
let obj = {
a: 'Hi',
}
let copy = Object.assign({},obj);
copy.a = 3;
console.log(obj.a);
所以在我们的例子中 {} 是我们的目标(一个空对象),我们的源是 obj 变量。
推荐阅读
- spring-boot - spring boot: hikari configs camelcase vs configs with lowercase and -
- uwp - 在为 uwp 生成 AppPackage 时在 Xamarin.Forms 中。有没有办法将其转换为 .exe 或单击安装之类的东西
- testing - 如何在 rxjs 中测试连接流
- node.js - Mongoose 根据数组字段值的最后一个元素对查询结果进行排序
- plsql - 在 PL/SQL 中的游标中返回已删除的行
- android - 使用rest api将位图图像发送到服务器
- python - 如何使用 Google Adwords API 从campaing 中获取否定关键字列表
- ios - UICollectionView 滑块图像未显示
- sql-server - 关于数据库表重复值的最佳实践
- c# - 将另一个模型绑定到局部视图,例如嵌套局部视图绑定