神奇的 Javascript,谁能告诉我为什么

2021-05-05 14:08:42 +08:00
 zero3412
let data = [
{x:0, y:1},
{x:2, y:3},
];

let A = data[0];
let B = data[1];

A.x = B.x;
A.y = B.y;

console.log(data, A, B)

为什么 data[0].x == 2 ???
明明申请了变量 A,我只想改变变量 A,怎么连 data 的值都变了
这是什么原理,搞 PHP 的搞不明白啊
6773 次点击
所在节点    JavaScript
53 条回复
Leiothrix
2021-05-06 11:19:20 +08:00
JavaScript 浅拷贝和深拷贝的区别,浅拷贝两个对象指向同一个地址,深拷贝是新开栈,两个对象指向不同的地址。可使用 JSON.parse(JSON.stringify(obj))进行深拷贝,修改后不会影响到原对象数据。
ganbuliao
2021-05-06 11:34:34 +08:00
object 对象默认是引用 知道这个就清楚了
kamal
2021-05-06 11:54:06 +08:00
est
2021-05-06 12:05:24 +08:00
楼主低级黑
zhuweiyou
2021-05-06 14:06:48 +08:00
我感觉你在黑 PHP
zhengfan2016
2021-05-06 15:13:59 +08:00
为什么我看着觉得很正常,我第一门语言是 python,有没有老哥给我讲讲哪儿不正常 233
IvanLi127
2021-05-06 16:47:43 +08:00
我记得 php 里也有引用传参啊,楼主用的啥版本的 php,代码放出来我们品品?
MonkeyD1
2021-05-06 17:26:45 +08:00
指针啊
AoEiuV020
2021-05-06 17:29:13 +08:00
深拷贝,浅拷贝,js 无关,一般都有这些区别,
vueli
2021-05-06 17:40:12 +08:00
前面的 = 是指向
ruike007
2021-05-06 17:42:53 +08:00
这不是深浅拷贝的问题吗?基础啊,大哥
karott7
2021-05-06 17:45:16 +08:00
这不前端正常操作?赋值对象都是引用
fescover
2021-05-06 17:54:43 +08:00
正常操作,还有更 bt 的,猜猜下面输出什么
NaN===NaN
null===null
null==NaN
{}==={}
[]===[]
""===""

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/774968

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX