
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 日 你这已经是你理解的‘深拷贝了’ |