Le clonage d'objets JavaScript est une tâche cruciale dans divers scénarios de programmation. Cependant, créer une copie d'un objet qui n'est pas affectée par les modifications apportées à l'original peut s'avérer difficile en raison de la complexité du système d'objets JavaScript.
Attribution d'objets natifs de JavaScript L'opérateur (par exemple, x = y) crée uniquement une référence à l'objet d'origine. Les modifications apportées à x ou à y affecteront les deux objets. De plus, la copie d'objets dérivés d'objets JavaScript intégrés (par exemple, Tableau, Date) peut introduire des propriétés indésirables.
Pour créer une copie complète d'un objet JavaScript, considérez la solution complète suivante :
function clone(obj) { if (null == obj || "object" != typeof obj) return obj; var copy = obj.constructor(); for (var attr in obj) { if (obj.hasOwnProperty(attr)) copy[attr] = clone(obj[attr]); } return copy; }
Cette fonction utilise une approche récursive pour parcourir les propriétés de l'objet et créer un nouvel objet avec des instances distinctes pour chaque propriété valeur. Il gère les cas de types d'objets nuls, non définis et divers intégrés tout en excluant les propriétés non énumérables et cachées.
Bien que la solution couvre la plupart des scénarios, elle suppose que les données de l'objet forment une structure arborescente, ce qui signifie qu'il n'y a pas de références circulaires dans l'objet. En outre, cela nécessite une connaissance du constructeur de l'objet pour instancier correctement l'objet cloné.
Dans les navigateurs modernes, la norme de clonage structuré offre un moyen plus robuste et efficace de créer des copies complètes d'objets. La fonction structuréClone() clone l'objet dans son intégralité, en préservant les propriétés cachées et les références circulaires.
const clone = structuredClone(object);
N'oubliez pas que le clonage d'objets peut être une tâche complexe et considérez les limites de chaque approche en fonction des exigences spécifiques. de votre candidature.
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!