let a={age: 10}
let b={...a}
a===b // why false?
es 严格等于的规范文档: 7. Return true if x and y refer to the same object. Otherwise, return false.
1
Liam1997 2021-05-10 10:48:55 +08:00
对象的引用不同
|
2
Natsuno 2021-05-10 10:50:14 +08:00
b 是一个新对象
|
3
10bkill1p 2021-05-10 10:50:15 +08:00 1
你都说是新对象了😅
|
4
codder 2021-05-10 10:53:04 +08:00
因为你只有一层所以浅拷贝就是 false 啊,展开操作符(...)和 Object.assign()是一样的效果
|
5
shintendo 2021-05-10 10:53:41 +08:00
浅拷贝的浅,指的是:
let a = {age: {num: 10}} let b = {...a} a.age === b.age //true 但它仍然是“拷贝”,所以 a===b 肯定是 false |
6
7gugu 2021-05-10 10:57:24 +08:00
浅拷贝是只拷贝第一层的原始类型值,和第一层的引用类型地址。
|
7
gdrk 2021-05-10 11:03:03 +08:00
浅拷贝也会生成新对象啊,只是只能拷贝一层而已。a 和 b 指向不同的对象地址,当然是 false
|
8
des 2021-05-10 11:08:09 +08:00
|
10
otakustay 2021-05-10 11:11:21 +08:00
这就是标准的浅拷贝做法,你要是引用相等我们会很困扰的
let a = {age: 10}; let b = {...a}; b.age = 21; console.log(a.age); // 应该是啥 |
11
EPr2hh6LADQWqRVH 2021-05-10 12:23:16 +08:00
现在是谁每天在提什么深浅拷贝的
说克隆不好吗, 克隆一个你,你和你的克隆是一回事吗,马上就理解了 |
12
hanyceZ 2021-05-10 13:36:31 +08:00 1
|
13
KouShuiYu 2021-05-10 16:05:24 +08:00
这样比较才有意义
``` let a = {}; let b = {_a:a}; let _a = {...b}['_a']; a === _a; // true ``` |
14
youmoo 2021-05-10 17:15:27 +08:00
你也可以这样烤(乱入😃 ):
```js let a={age: 10} let [b]=[a]; a===b // this time it's true ``` |
15
yaphets666 2021-05-10 20:30:38 +08:00
你这已经是你理解的‘深拷贝了’
|