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