# Hashes in JavaScript



## programmierer123 (26. Jan 2018)

Hallo,
auf dieser Seite findet man folgende Information: https://www.w3schools.com/js/js_arrays.asp



> JavaScript does *not* support arrays with named indexes.
> In JavaScript, *arrays* always use *numbered indexes*.





> *WARNING !!*
> If you use named indexes, JavaScript will redefine the array to a standard object.
> After that, some array methods and properties will produce *incorrect results*.




```
var person = [];
person["firstName"] = "John";
person["lastName"] = "Doe";
person["age"] = 46;
var x = person.length;         // person.length will return 0
var y = person[0];             // person[0] will return undefined
```




> In JavaScript, *arrays* use *numbered indexes*.
> In JavaScript, *objects* use *named indexes*.





> JavaScript does not support associative arrays.
> You should use *objects* when you want the element names to be *strings (text)*.
> You should use *arrays* when you want the element names to be *numbers*.



Es wird hier gesagt, dass JS keine assoziativen Arrays unterstützt und im nächsten Abschnitt wird erklärt, wann man nummerierte und wann man "named" Indices verwendet.
Das ist doch ein Widerspruch?


----------



## sascha-sphw (26. Jan 2018)

programmierer123 hat gesagt.:


> Es wird hier gesagt, dass JS keine assoziativen Arrays unterstützt und im nächsten Abschnitt wird erklärt, wann man nummerierte und wann man "named" Indices verwendet.
> Das ist doch ein Widerspruch?


Das sehe ich nicht so! Es wird gesagt, dass wenn Du named indexes brauchst, Du es mit Objects machst, denn Array wird automatisch zu Object wenn Du in einem Array named indexes verwendest.


----------



## programmierer123 (27. Jan 2018)

Das verstehe ich jetzt nicht.
Es wird doch gesagt, named Indexes (z.B. person["firstName"]) unterstützt JS nicht. 
Kannst du ein Beispiel nennen?


----------



## mrBrown (27. Jan 2018)

programmierer123 hat gesagt.:


> Das verstehe ich jetzt nicht.
> Es wird doch gesagt, named Indexes (z.B. person["firstName"]) unterstützt JS nicht.
> Kannst du ein Beispiel nennen?


Lies doch die Texte, die du zitierst? Da steht doch ganz explizit, das Objekte named indexes nutzen und Arrays numbered indexes.
Das Beispiel hast du oben schon selber gepostet.:


```
var person = [];
person["firstName"] = "John"; //person wird ein object mit named indexes
person["lastName"] = "Doe";
person["age"] = 46;
var x = person["firstName"];         // x ist "John"
```


----------



## programmierer123 (28. Jan 2018)

Ok, also ist gemeint wenn ich named Indexes brauche, ich das keyword new verwenden soll?
Bsp:
var x = new Array{alter:"16", groesse:"180"};

Und wenn numbered Indexes brauche, dann new nicht verwenden soll?
Bsp:
var cars = ["Saab", "Volvo", "BMW"];


----------



## sascha-sphw (28. Jan 2018)

Nein! Soll heißen, dass wenn Du folgendes machst, JavaScript aus dem Array automatisch ein Object macht.

```
var person = [];
person['firstname'] = 'John';
```

Wenn Du also numbered indexes brauchst machst Du es so:

```
var person = [
    'John'
];
```
oder

```
var person = []; // oder new Array()
person[0] = 'John';
```
oder

```
var person = []; // oder new Array()
person.push('John');
```


Und wenn Du named indexes brauchst machst du es so:

```
var person = {
    firstname: 'John'
};
```
oder

```
var person = {};
person['firstname'] = 'John';
```
oder

```
var person = {};
person.firstname = 'John';
```


----------



## Thallius (28. Jan 2018)

Es gibt eben keine Assoziatives Array in JS. Fertig! 

Dafür kannst du aber eben ein Object on the fly erstellen, was Java aben nicht kann. Sprich, du kannst Dein Object XY einfach durch das Attribut A erweitern indem du es mit XY[A] = B setzt.

Und um es jetzt wieder kompliziert zu machen:

Das liegt hat daran, dass JS eigentlich gar keine Objecte kennt, sondern Objecte nur assoziative Arrays sind...

Gruß

Claus


----------



## programmierer123 (28. Jan 2018)

Zusammengefasst kann man sagen, dass ein Array, welches Indexes verwendet, ein Array ist und Arrays, welche named Indexes verwenden, Objekte sind.

Warum sollte man aber named Indexes verwenden, wenn dannach manche Methoden, wie z.B. .length nicht funktionieren?


----------

