Un resumen simple de copia superficial y copia profunda
La copia superficial solo copia el puntero a un objeto, no el objeto en sí, y los objetos nuevos y antiguos aún comparten la misma memoria. Sin embargo, la copia profunda creará un objeto idéntico. El nuevo objeto no comparte memoria con el objeto original y las modificaciones al nuevo objeto no cambiarán el objeto original.
copia superficial
// 拷贝对象
{
..objValue}
// 拷贝数组
[...arrValue]
Copia profunda 1 (no recomendado)
// value为要拷贝对象
JSON.parse(JSON.stringify(value))
JSON.parse(JSON.stringify()) copia objetos de tiempo, objetos de error, expresiones regulares, funciones o valores indefinidos y otros. Este método causará problemas.
- Si hay un objeto de tiempo en json, el resultado de la serialización es: objeto de tiempo => forma de cadena
- Si hay objetos RegExp y Error en json, el resultado de la serialización solo obtendrá objetos vacíos RegExp y Error => {}
- Si hay una función indefinida en json, el resultado de la serialización perderá la función indefinida.
- Si hay NaN, Infinity y -Infinity en json, el resultado de la serialización será nulo
- Si hay un objeto en json generado por un constructor, el resultado de la serialización descartará el constructor del objeto.
- La copia profunda no se puede implementar si hay una referencia circular en el objeto.
copia profunda 2
Usando cloneDeep en Lodash
import {
cloneDeep } from 'lodash-es'
// value为要拷贝对象
cloneDeep(value)