Javascript As matrizes são realmente implementadas como matrizes?

A diferença entre um javascriptArray eObject não é muito grande. Na verdade, pareceArray adiciona principalmente olength, para que você possa usar os doisArrayareiaObjects como matrizes numéricas:

var ar = new Array();
ar[0] = "foo";
ar["bar"] = "foo";

var ob = new Object();
ob[0] = "foo";
ob["bar"] = "foo";

assert(ar[0] == ob[0] == ar["0"] == ob["0"] == ar.bar == ob.bar); // Should be true.

Então minhas perguntas são,em mecanismos javascript populares (V8, JavaScriptCore, SpiderMonkey etc.), como isso é tratado? Obviamente, não queremos que nossas matrizes sejam realmente armazenadas como mapas de hash com valores-chave! Como podemos ter certeza razoável de que nossos dados são armazenados como uma matriz real?

Tanto quanto posso ver, existem algumas abordagens que os mecanismos podem adotar:

Array é implementado exatamente da mesma maneira queObject - como uma matriz associativa com chaves de strinArray é um caso especial, com umstd::vectoratriz semelhante a @ que apóia as teclas numéricas e alguma heurística de densidade para impedir o uso insano de memória se você fizerar[100000000] = 0;Array é o mesmo queObject, e todos os objetos obtêm uma heurística para ver se o uso de uma matriz faria mais sentidAlgo incrivelmente complicado que eu não pense

Realmente isso seria mais simples se houvesse um tipo de matriz adequado toss Matrizes digitadas WebGLtoss).

questionAnswers(4)

yourAnswerToTheQuestion