Clonage correct d'objets JavaScript : un guide complet
Le clonage d'objets JavaScript nécessite une approche nuancée pour éviter des modifications inattendues dans l'objet d'origine. Cet article décortique les complexités du clonage d'objets et présente des solutions robustes.
Le défi de la copie d'objets intégrés
Tentative de cloner des objets JavaScript intégrés (par exemple, Date, String) peuvent entraîner des écarts par rapport au comportement attendu. Par exemple, le clonage d'un objet Date peut entraîner un décalage horaire entre l'objet original et l'objet cloné.
Une fonction générale de copie approfondie
Une fonction de clonage complète doit tenir compte pour différents types d'objets et propriétés cachées. Voici un exemple qui répond à ces préoccupations :
function clone(obj) { var copy; // Handle simple types and null/undefined if (null == obj || typeof obj != "object") return obj; // Handle Dates if (obj instanceof Date) { copy = new Date(); copy.setTime(obj.getTime()); return copy; } // Handle Arrays if (obj instanceof Array) { copy = []; for (var i = 0, len = obj.length; i < len; i++) { copy[i] = clone(obj[i]); } return copy; } // Handle Objects if (obj instanceof Object) { copy = {}; for (var attr in obj) { if (obj.hasOwnProperty(attr)) copy[attr] = clone(obj[attr]); } return copy; } throw new Error("Unable to copy obj! Its type isn't supported."); }
Limitations et mises en garde
Cette fonction fonctionne bien pour les types simples, les données arborescentes et les objets sans circulaire références. Cependant, elle présente des limites lorsqu'il s'agit d'objets complexes, notamment :
Clonage structuré moderne
ES2019 a introduit le clonage structuré, qui offre un moyen plus fiable et plus efficace de cloner des objets, y compris des objets circulaires. références. Cependant, il se peut qu'il ne soit pas pris en charge dans tous les navigateurs.
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!