JavaScript中搭配JSON.parse(JSON.stringify(obj))使用扩展运算符的作用是什么
结论
这段代码里的扩展运算符绝大多数场景下是完全冗余的无效操作,可以直接删掉,不影响最终运行结果。
具体原因解释
- 首先
JSON.parse(JSON.stringify(obj1))执行完成后,本身就会返回一个全新的、经过深拷贝的普通对象,直接赋值给x即可,下面两种写法得到的结果完全等价:// 原冗余写法 const x = { ...JSON.parse(JSON.stringify(obj1)) }; // 等价精简写法 const x = JSON.parse(JSON.stringify(obj1)); - 扩展运算符在这里的作用只是把深拷贝得到的对象的所有可枚举属性,再浅拷贝一层到新的空对象里,既不会提升深拷贝的效果,也不会改变最终对象的内容,只会额外消耗无意义的性能。
- 仅有的特殊适用场景:如果
obj1是数组或者其他非普通对象,JSON.parse(JSON.stringify(obj1))会返回对应类型的值,此时用{...}包裹会把结果转成键为下标的普通对象,这种属于特定业务需求,不是通用写法。 - 通常出现这种写法的原因是代码作者对深拷贝、扩展运算符的作用理解不透彻,误加了冗余逻辑。
内容的提问来源于stack exchange,提问作者Areeba Akhtar
相关产品推荐
相关产品推荐

