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
Libérer: 2024-12-13 07:55:12
original
981 Les gens l'ont consulté

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
Copier après la connexion

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);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal