array from是深拷贝还是浅拷贝?

286 阅读1分钟

Array.from() 方法在JavaScript中并不直接提供深拷贝或浅拷贝的功能。 主要是用来将类数组对象或可迭代对象转换成一个新的数组实例。

当你用 Array.from() 将一个数组或类似数组的对象转换为新数组时,它会创建一个新的数组实例,并且会遍历原数组(或可迭代对象)的每一项并将其值放入新数组中。但请注意,这个过程中(很关键):

  • 如果数组元素是基本类型(如数字、字符串、布尔值),那么新数组将会包含这些基本类型的副本。
  • 如果数组元素是引用类型(如对象或数组),那么新数组将会包含这些引用类型的引用,而非对象本身的副本。

这意味着,对于引用类型的元素,Array.from() 执行的操作实际上是浅拷贝。若想实现深拷贝,需要额外进行处理,例如使用 JSON.parse(JSON.stringify(array))(适用于能被JSON序列化的对象)、lodash库的_.cloneDeep方法或其他递归克隆方法。