È un oggetto completamente vuoto (nulla ereditato da qualsiasi .prototype
inclusivo di Object.prototype
), quindi è possibile garantire che qualsiasi ricerca di proprietà avrà esito positivo solo se la proprietà è stata esplicitamente aggiunta all'oggetto.
Ad esempio, se si desidera memorizzare alcuni dati in cui non si conosceranno i tasti in anticipo, è possibile che una chiave fornita abbia lo stesso nome di un membro di Object.prototype
e causi un bug.
In questi casi, è necessario eseguire un controllo esplicito .hasOwnProperty()
per escludere valori ereditati imprevisti. Ma se non c'è nulla di ereditato, il test può essere semplificato in un test if (key in my_object) {
o, in alternativa, un semplice test di verità if (my_object[key]) {
, se appropriato.
Inoltre, senza una catena di prototipi, immagino che le ricerche di proprietà che risultano non esistere sarebbero più veloci, dal momento che solo l'oggetto immediato dovrebbe essere controllato. Indipendentemente dal fatto che questo si estenda in realtà (a causa di ottimizzazioni), verrà determinato con test delle prestazioni.
fonte
2014-11-16 20:22:26
Idem come indicato nella risposta: http://www.devthought.com/2012/01/18/an-object-is-not-a-hash/ Per fare in modo scontri con le proprietà ereditate . – Aravind