Skip to content

JavaScript 踩坑记录

更新: 4/1/2025 字数: 0 字 时长: 0 分钟

扩展运算符相关的坑

ES6的扩展运算符...还挺好用的,它可以用在函数的参数上,也可以用在数组上去合并与复制数组,同样可以用在对象上。但是它的坑也有很多

对象扩展运算符返回属性限制

对象的扩展运算符,只会返回参数对象自身的、可枚举的属性。

js
class C {
  p = 12
  m() {}
}

let c = new C()
let clone = { ...c }

clone.p // ok
clone.m() // 报错

对象扩展运算符赋值覆盖问题

如果我们把扩展运算符放在我们自定义的属性后面,那么我们自定义的属性会被扩展运算符内部的同名属性覆盖掉。稍不注意就被坑了

js
let userInfo = {
    name: 'zhangsan',
    id: 1,
}

let res = {
    id: 2233
    ...userInfo, // 这里的id会被覆盖掉,
}

这也给我们一个教训:如果是想使用...运算符的展开作用,最好放在最前面,放在我们自定义属性的前面

扩展运算拷贝问题

展开运算符复制对象/数组时,值类型会被直接复制,而引用类型的地址会被拷贝出来,性质相当于浅拷贝

js
let obj = {
  a: 1,
  b: {
    c: 2,
  },
}

let obj1 = { ...obj }
obj.b.c = 3
obj1.b.c // 3

如有转载或 CV 的请标注本站原文地址