Recentemente mi sono imbattuto nel problema dell'utilizzo di for..in loop su array in JavaScript.JavaScript: proprietà non numerabili: quando e perché?
In base alle risposte nella domanda this, for..in è inteso per enumerare le proprietà di un oggetto, incluse quelle ereditate.
In tal caso, perché è possibile definire proprietà come non enumerabili utilizzando Object.defineProperty? Questo non va contro l'intera intenzione di ... in? O è considerato una cattiva pratica e dovrebbe essere evitato?
Inoltre, perché dovremmo voler ripetere tutte le proprietà in questo modo in primo luogo (cioè utilizzando un ciclo for..in)? Quando potrebbe essere utile?
E perché non definire tutte le estensioni di prototipo (Array) come non enumerabili e continuare a utilizzare for..in con gli array?
Quindi, in pratica, stai dicendo che estendere i prototipi incorporati con le proprietà enumerabili è una cattiva codifica, e in un mondo pieno di codificatori perfetti sarebbe stato perfettamente legittimo usare per ... con gli array? Se è così, per esempio su prototype.js? Lo stanno facendo semplicemente storto? –
@JohanHirsch ** No **, non sono ** ** dicendo che 'for ... in 'sarebbe buono da usare con gli array. Si prega di rileggere il terzo paragrafo sopra. Prototype.js era un progetto ambizioso, e penso che mentre si è trattato di un buon esperimento è una prova evidente che estendere gli oggetti di sistema non è una grande idea. Naturalmente, ora che la maggior parte degli ambienti JavaScript consente proprietà non enumerabili, forse Prototype sarebbe un problema minore. (Mi è piaciuto molto lavorare con Prototype quando lo facevo, 8 o 9 anni fa.) – Pointy