| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/fr/docs/Web/API/Web_Workers_API/Structured_clone_algorithm | [Back] [Original] |
Get to know MDN better
Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.
L'algorithme de clonage structur est un nouvel algorithme dfini par la spcification HTML5 pour srialiser les objets JavaScript complexes. Il est plus puissant que JSON en cela qu'il supporte la srialisation d'objets contenant des graphes cycliques des objets peuvent faire rfrence des objets faisant rfrence d'autres objets dans le mme graphe. De plus, dans certains cas, l'algorithme de clonage structur peut tre plus efficace que JSON.
L'algorithme, essentiellement, parcourt tous les champs de l'objet original, copiant les valeurs de chaque champ dans un nouvel objet. Si un champ est lui-mme un objet avec des champs, ces champs sont parcourus de manire rcursive jusqu' ce que chaque champ et sous-champ aient t copi dans le nouvel objet.
Il y a quelques avantages notables utiliser l'algorithme de clonage structur plutt que JSON :
RegExp.Blob, File et FileList.ImageData. Les dimensions du CanvasPixelArray du clone correspondront celles de l'original, et il recevra une copie des mmes donnes de pixels.Error et Function ne peuvent pas tre copis par l'algorithme de clonage structur ; toute tentative de le faire mettra une exception DATA_CLONE_ERR.DATA_CLONE_ERR.lastIndex des objets RegExp n'est pas prserv.| Type d'objet | Notes |
|---|---|
| Tous types primitifs | l'exception des symboles |
| Objet Boolen | |
| Objet String | |
| Date | |
| RegExp | Le champ lastIndex n'est pas prserv |
Blob |
|
File |
|
FileList |
|
| ArrayBuffer | |
| ArrayBufferView | Ce qui implique tous les tableaux typs tels que Int32Array, etc. |
ImageData |
|
| Array | |
| Object | Inclut seulement les objets plats (par ex. depuis un objet littral) |
| Map | |
| Set |
Si vous voulez une copie profonde d'un objet (c'est--dire une copie rcursive de toutes les proprits imbriques, en parcourant la chane des prototypes), vous devez employer une autre approche. Ce qui suit est un exemple possible.
function clone(objectToBeCloned) {
// Cas basique.
if (!(objectToBeCloned instanceof Object)) {
return objectToBeCloned;
}
var objectClone;
// Filtre les objets spciaux.
var Constructor = objectToBeCloned.constructor;
switch (Constructor) {
// Implmenter dautres objets spciaux ici.
case RegExp:
objectClone = new Constructor(objectToBeCloned);
break;
case Date:
objectClone = new Constructor(objectToBeCloned.getTime());
break;
default:
objectClone = new Constructor();
}
// Clone chaque proprit.
for (var prop in objectToBeCloned) {
objectClone[prop] = clone(objectToBeCloned[prop]);
}
return objectClone;
}
Note :
Cet algorithme ne prend en charge que les objets spciaux RegExp, Array et Date. Vous pouvez implmenter d'autres cas spciaux selon vos besoins.
window.historywindow.postMessage()Cette page a t modifie le 7 sept. 2025 par les contributeurices du MDN.
Certaines parties de ce contenu sont protges par le droit d'auteur 19982026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.
| Web Proxy Viewer | New URL | Original Page |