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!