Vue之JavaScript的对象引用和浅拷贝

Vue之JavaScript的对象引用和浅拷贝

对象引用

javascript 复制代码
var param1={name:"111"};
var param2=param1;
param2.name="222";

console.log(param1.name); // 输出 "222"
console.log(param2.name); // 输出 "222"

在这段代码中,param1 是一个对象,它有一个名为 name 的属性,其值为 "111"。然后,param2 被赋值为 param1,这意味着 param2 和 param1 引用了同一个对象,而不是创建了一个新的对象。因此,当你修改 param2.name 的值为 "222" 时,实际上是修改了 param1 引用的对象的属性。因此,此时 param1.name 的值也变为了 "222"。

这是因为 JavaScript 中对象是通过引用传递的,而不是通过值传递。所以当你对一个对象进行操作时,无论是通过原始引用还是通过指向该对象的其他引用,对对象所做的更改都会影响所有引用该对象的地方。

浅拷贝

如果你想确保修改 param2 不会影响到 param1,你需要创建一个 param2 的新对象而不是将其赋值为 param1。这样,param2 就不再指向 param1 引用的同一对象,而是指向一个新的独立对象。

javascript 复制代码
var param1 = { name: "111" };

// 使用对象的浅拷贝,可以使用 Object.assign 或者展开运算符
var param2 = Object.assign({}, param1); // 或者 var param2 = { ...param1 };

param2.name = "222";

console.log(param1.name); // 输出 "111"
console.log(param2.name); // 输出 "222"

在这个例子中,Object.assign({}, param1) 创建了 param1 的浅拷贝,将其属性复制到一个新的对象中,从而确保 param2 不再引用与 param1 相同的对象

相关推荐
谷歌开发者41 分钟前
Web 开发指向标 | Chrome 开发者工具学习资源 (一)
前端·chrome·学习
名字越长技术越强44 分钟前
Chrome和IE获取本机ip地址
前端
天***88961 小时前
Chrome 安装失败且提示“无可用的更新” 或 “与服务器的连接意外终止”,Chrome 离线版下载安装教程
前端·chrome
半梦半醒*1 小时前
zabbix安装
linux·运维·前端·网络·zabbix
大怪v1 小时前
【搞发🌸活】不信书上那套理论!亲测Javascript能卡浏览器Reader一辈子~
javascript·html·浏览器
清羽_ls1 小时前
React Hooks 核心规则&自定义 Hooks
前端·react.js·hooks
你的人类朋友1 小时前
“签名”这个概念是非对称加密独有的吗?
前端·后端·安全
西陵2 小时前
Nx带来极致的前端开发体验——任务缓存
前端·javascript·架构
Panda__Panda2 小时前
docker项目打包演示项目(数字排序服务)
运维·javascript·python·docker·容器·c#
10年前端老司机3 小时前
Promise 常见面试题(持续更新中)
前端·javascript