C’è qualcosa che garantisce un tempo costante per accedere a una proprietà di un object in JavaScript?

Questo è per quanto riguarda un dibattito che ho avuto con un intervistatore quando intervistavo Amazon.

Creiamo un object:

var Obj = {}; Obj['SomeProperty'] = function ( ) { console.log("Accessed some property"); }; Obj[69] = true; 

C’è qualcosa nella garanzia JavaScript che quando Obj['SomeProperty'] successivamente a quelle 2 proprietà come Obj['SomeProperty'] e Obj[69] i rispettivi valori function ( ) { console.log("Accessed some property"); }; function ( ) { console.log("Accessed some property"); }; e 69 sono guardati in tempo O (1)? So che l’operatore di accesso [] dà a un programmatore esperto l’impressione che abbia a che fare con una struttura di ricerca O (1), ma non può essere ansible per un motore JavaScript implementare Object in modo tale che le proprietà non vengano cercate in O (1)?

C’è qualcosa nel codice JavaScript che garantisce che i valori vengano cercati nell’ora O (1)?

No. JavaScript non fornisce alcuna garanzia di complessità di alcun tipo, ad eccezione delle collezioni ES6 .

So che l’operatore di accesso [] dà a un programmatore esperto l’impressione che abbia a che fare con una struttura di ricerca O (1)

Sì, lo è, questa è un’aspettativa ragionevole. I motori utilizzano tutti i tipi di ottimizzazioni, dalle classi nascoste su hashmap agli array dinamici, per soddisfare questi presupposti.

Naturalmente, non dimenticare mai che gli oggetti JS sono bestie complesse e l’accesso a una semplice proprietà potrebbe innescare una trappola getter che a sua volta potrebbe fare qualsiasi cosa.

Non è ansible per un motore JavaScript implementare Object in modo tale che le proprietà non vengano cercate in O (1)?

Sì, è ansible.