Maison >interface Web >js tutoriel >Pourquoi `Array.prototype.fill()` crée-t-il des références d'objet au lieu de copies ?

Pourquoi `Array.prototype.fill()` crée-t-il des références d'objet au lieu de copies ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-13 07:55:12979parcourir

Why Does `Array.prototype.fill()` Create Object References Instead of Copies?

Référence d'objet dans Array.prototype.fill()

Lors de l'utilisation de Array.prototype.fill() pour initialiser un tableau avec des objets, il est important de noter que la méthode transmet une référence au même objet plutôt que de créer de nouvelles instances pour chaque élément. Cela peut conduire à un comportement inattendu lors de la modification des propriétés des objets après l'initialisation.

Considérons l'exemple suivant :

var arr = new Array(2).fill({});
arr[0] === arr[1]; // true
arr[0].test = 'string';
arr[1].test === 'string'; // also true

Dans cet exemple, deux éléments du tableau sont initialisés avec la même référence d'objet. Par conséquent, arr[0] et arr[1] font référence au même objet. Lorsque la propriété test est définie sur arr[0], elle est également automatiquement définie sur arr[1] en raison de la référence partagée.

Pour éviter ce problème, on peut à la place remplir le tableau avec n'importe quelle valeur arbitraire et puis utilisez map() pour créer de nouveaux objets pour chaque élément :

var arr = new Array(2).fill(undefined).map(u => ({}));
var arr = new Array(2).fill().map(Object);

Dans ces exemples, la valeur non définie ou nulle est initialement utilisée pour remplir le tableau. Par la suite, map() est utilisé pour créer de nouveaux objets pour chaque élément, remplissant ainsi le tableau avec des objets distincts.

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