Maison > Article > interface Web > Quelle est la différence entre la copie profonde et la copie superficielle dans JS ?
Quelle est la différence entre la copie profonde et la copie superficielle en JS ?
La différence entre les deux est de savoir si l'entité copiée d'un objet est réellement obtenue, plutôt qu'une référence. La copie profonde ouvre une adresse mémoire dans l'ordinateur pour stocker l'objet copié, tandis que la copie superficielle ouvre une adresse mémoire dans l'ordinateur pour stocker l'objet copié. seulement Il pointe vers l'adresse mémoire copiée. Si l'objet dans l'adresse d'origine est modifié, l'objet copié superficiellement changera également en conséquence.
Copie approfondie
La méthode la plus simple est
JSON.parse(JSON.stringify()) function deepCopy(o) { return JSON.parse(JSON.stringify(o)) } var c = { age: 1, name: undefined, sex: null, tel: /^1[34578]\d{9}$/, say: () => { console.log('hahha') } } // { age: 1, sex: null, tel: {} }
Il convient de noter que cette méthode de copie ne peut pas copier certains attributs de fichiers spéciaux (tels comme expressions régulières, undefine, fonction)
Utiliser la récursion pour copier tous les attributs hiérarchiques
function deepCopyTwo(obj) { let objClone = Array.isArray(obj) ? [] : {}; if (obj && typeof obj == 'object') { for (const key in obj) { //判断obj子元素是否为对象,如果是,递归复制 if (obj[key] && typeof obj[key] === "object") { objClone[key] = deepCopyTwo(obj[key]); } else { //如果不是,简单复制 objClone[key] = obj[key]; } } } return objClone; }
Copie superficielle
object.assign(target,source)
Object Le .assign La méthode copie uniquement les propriétés énumérables de l'objet source et les propriétés de l'objet lui-même
Si une propriété de l'objet cible a la même clé, la propriété sera écrasée par la propriété de la source. Les propriétés des sources ultérieures remplaceront de la même manière les propriétés antérieures.
Object.assign ignorera celles dont la valeur est [null] null est un littéral JavaScript qui représente null ou une valeur "vide". présent. C'est l'une des valeurs primitives JavaScript. ") ou objet source non défini.
Tutoriel recommandé : "Tutoriel JS"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!