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 年 5 月 10 日
对象的引用不同
|
2
Natsuno 2021 年 5 月 10 日
b 是一个新对象
|
3
10bkill1p 2021 年 5 月 10 日 你都说是新对象了😅
|
4
codder 2021 年 5 月 10 日
因为你只有一层所以浅拷贝就是 false 啊,展开操作符(...)和 Object.assign()是一样的效果
|
5
shintendo 2021 年 5 月 10 日
浅拷贝的浅,指的是:
let a = {age: {num: 10}} let b = {...a} a.age === b.age //true 但它仍然是“拷贝”,所以 a===b 肯定是 false |
6
7gugu 2021 年 5 月 10 日
浅拷贝是只拷贝第一层的原始类型值,和第一层的引用类型地址。
|
7
gdrk 2021 年 5 月 10 日
浅拷贝也会生成新对象啊,只是只能拷贝一层而已。a 和 b 指向不同的对象地址,当然是 false
|
8
des 2021 年 5 月 10 日
|
10
otakustay 2021 年 5 月 10 日
这就是标准的浅拷贝做法,你要是引用相等我们会很困扰的
let a = {age: 10}; let b = {...a}; b.age = 21; console.log(a.age); // 应该是啥 |
11
EPr2hh6LADQWqRVH 2021 年 5 月 10 日
现在是谁每天在提什么深浅拷贝的
说克隆不好吗, 克隆一个你,你和你的克隆是一回事吗,马上就理解了 |
12
hanyceZ 2021 年 5 月 10 日 |
13
KouShuiYu 2021 年 5 月 10 日
这样比较才有意义
``` let a = {}; let b = {_a:a}; let _a = {...b}['_a']; a === _a; // true ``` |
14
youmoo 2021 年 5 月 10 日
你也可以这样烤(乱入😃 ):
```js let a={age: 10} let [b]=[a]; a===b // this time it's true ``` |
15
yaphets666 2021 年 5 月 10 日
你这已经是你理解的‘深拷贝了’
|