
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 你都说是新对象了 |
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 |
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 你这已经是你理解的‘深拷贝了’ |