MST
星途 面试题库

面试题:JavaScript 复杂对象赋值表达式的优化

现有一个多层嵌套的复杂对象 obj1 = {a: {b: {c: [1, 2, 3]}}}; 要将其赋值给 obj2 并对 obj2 的操作不影响 obj1,写出优化后的赋值代码,并解释为什么这样做能实现目的。
18.3万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

在JavaScript中,可以使用JSON.parse(JSON.stringify())方法来实现深拷贝,从而达到对obj2的操作不影响obj1

const obj1 = {a: {b: {c: [1, 2, 3]}}};
const obj2 = JSON.parse(JSON.stringify(obj1));

解释

  1. JSON.stringify(obj1):这一步将obj1对象转换为JSON字符串。在这个过程中,对象的结构和数据被序列化为一个字符串表示。它会递归地处理对象的所有层级,包括嵌套的对象和数组。
  2. JSON.parse():将第一步生成的JSON字符串解析回一个新的JavaScript对象。这个新对象与原对象obj1具有相同的结构和数据,但它是一个全新的独立对象,在内存中有自己独立的地址空间。

因此,对obj2进行任何操作,都不会影响到obj1,因为它们是两个完全独立的对象。不过需要注意的是,JSON.parse(JSON.stringify())这种方法有一些局限性,例如不能处理undefined、函数、正则表达式等特殊类型的数据。如果对象中存在这些类型的数据,需要使用更复杂的深拷贝方法,比如使用递归手动实现深拷贝或者使用lodash库的cloneDeep方法。