Como as matrizes javascript são implementadas?

Ou seja, como é que o seguinte código:

var sup = new Array(5);
sup[0] = 'z3ero';
sup[1] = 'o3ne';
sup[4] = 'f3our';
document.write(sup.length + "<br />");

saída '5' para o comprimento, quando tudo o que você fez é definir vários elementos?

Meu 'problema' com este código é que eu não entendo comolength&nbsp;muda sem chamar umgetLength()&nbsp;ou umsetLength()&nbsp;método. Quando eu faço um dos seguintes:

a.length
a['length']
a.length = 4
a['length'] = 5

em um objeto sem matriz, ele se comporta como uma matriz dict / associativa. Quando faço isso no objeto array, ele tem um significado especial. Que mecanismo em JavaScript permite que isso aconteça? O javascript possui algum tipo de sistema de propriedade que traduz

a.length
a['length']

em métodos "get" e

a.length = 4
a['length'] = 5

em métodos "set"?