Extension des prototypes de tableaux et d'objets sans encombrer les boucles For-In
Lors de l'extension de Array.prototype et Object.prototype avec des méthodes d'assistance, il est Il est crucial de garantir que ces méthodes n'interfèrent pas avec les boucles for-in en apparaissant sous forme de valeurs. Ceci est particulièrement important dans les scénarios où d'autres codes s'appuient sur des boucles for-in pour accéder uniquement aux valeurs.
Évitez les boucles For-In avec des tableaux
La solution idéale est de évitez d'utiliser des boucles for-in avec des tableaux. Utilisez plutôt des méthodes d'itération spécifiques au tableau, telles que .map() et .filter() intégrés. Évitez les boucles for-in dans les fonctions génériques qui peuvent rencontrer à la fois des tableaux et des objets.
Utilisez hasOwnProperty() avec Objects
Si l'utilisation de boucles for-in est inévitable en générique fonctions, utilisez la méthode hasOwnProperty() pour exclure les propriétés héritées du prototype :
for (var prop in anyObj) if (Object.prototype.hasOwnProperty.call(anyObj, prop)) // do something
Propriétés non énumérables dans ECMAScript 5.1
Dans ECMAScript 5.1, vous pouvez définir des propriétés non énumérables à l'aide de Object.defineProperty() :
Object.defineProperty(Array.prototype, "find", { enumerable: false, writable: true, value: function(testFun) { // code to find element in array } });
Cela garantit que la méthode "find" n'apparaîtra pas dans le for-in boucles. Cependant, il est important de noter que cette approche n'est pas prise en charge dans les anciens navigateurs. Pensez à utiliser des cales comme ES5-shim pour la compatibilité.
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!