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 dans JS ?

Guanhui
Guanhuioriginal
2020-06-12 14:47:105388parcourir

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn