Proč mohu do pole přidat pojmenované vlastnosti, jako by to byl objekt?

Následující dva různé fragmenty kódu se mi zdají ekvivalentní:

var myArray = Array();
myArray['A'] = "Athens";
myArray['B'] = "Berlin";

a

var myObject = {'A': 'Athens', 'B':'Berlin'};

protože se oba chovají stejně a také typeof(myArray) == typeof(myObjects) (oba poskytují ‘objekt’).

Je mezi těmito variantami nějaký rozdíl?

Odpověď

Prakticky vše v javascriptu je objekt, takže objekt Array můžete „zneužít“ nastavením libovolných vlastností. To by však mělo být považováno za škodlivé. Pole jsou pro numericky indexovaná data – pro nenumerické klíče použijte Object.

Zde je konkrétnější příklad, proč se nenumerické klíče „nevejdou“ do pole:

var myArray = Array();
myArray['A'] = "Athens";
myArray['B'] = "Berlin";

alert(myArray.length);

Tím se nezobrazí „2“, ale „0“ – do pole nebyly přidány žádné prvky, pouze některé nové vlastnosti přidané do objektu pole.