Avatar billede Slettet bruger
28. april 2011 - 16:12 Der er 7 kommentarer og
1 løsning

Hvornår er et array associativt og hvornår indexeret ?

Hvis jeg opretter et nyt array, og indsætter en værdi, således:

var ar = new Array(); ar[ 1000 ] = "abc";
vil ar.length returnere 1001 // tusinde elementer, ok

var ar = new Array(); ar[ 1000000 ] = "abc";
ar.length => 1000001 // en million..

var ar = new Array(); ar[ 1000000000 ] = "abc";
ar.length => 1000000001 // en milliard !!!

var ar = new Array(); ar[ 1234567890 ] = "abc";
ar.length => 1234567891 // også pænt mange..

MEN

var ar = new Array(); ar[ 6776835782919079 ] = "abc";
ar.length => 0  // Arrayet er "associativt" - pyha!

Hvor ER grænsen ?
- risikerer jeg at browseren "reserverer plads" i memory til en milliard elementer, selvom jeg har brug for 4 ?
Avatar billede arne_v Ekspert
28. april 2011 - 16:22 #1
Jeg mener at skillelinien gaar ved 2^32.
Avatar billede arne_v Ekspert
28. april 2011 - 16:23 #2
15.4 Array Objects
Array objects give special treatment to a certain class of property names. A property name P (in the form of a String value) is an array index if and only if ToString(ToUint32(P)) is equal to P and ToUint32(P) is not equal to 232−1. A property whose property name is an array index is also called an element. Every Array object has a length property whose value is always a nonnegative integer less than 232. The value of the length property is numerically greater than the name of every property whose name is an array index; whenever a property of an Array object is created or changed, other properties are adjusted as necessary to maintain this invariant. Specifically, whenever a property is added whose name is an array index, the length property is changed, if necessary, to be one more than the numeric value of that array index; and whenever the length property is changed, every property whose name is an array index whose value is not smaller than the new length is automatically deleted. This constraint applies only to own properties of an Array object and is unaffected by length or array index properties that may be inherited from its prototypes.
Avatar billede Slettet bruger
28. april 2011 - 17:11 #3
Perfekt, tak!
Og det passer med 2³² (4294967296), kan jeg tilføje : )

Og der afsættes ALDRIG plads på forhånd, elementer indsættes bare, as is.

PS: De 232 der nævnes i "15.4" må noget være "protokolfnidder" der har ødelagt 2³² for ellers er det jo mørkesort tale (for mig..?) - gad vide om det er formuleret af en ex-forsikringssælger : )

Læg et svar : )
Avatar billede Slettet bruger
28. april 2011 - 17:14 #4
2³²-1 faktisk (4294967295)
Avatar billede arne_v Ekspert
28. april 2011 - 17:19 #5
Jeg copy pastede fra ECMA-262 PDF til E. Noget koksede.
Avatar billede Slettet bruger
28. april 2011 - 17:32 #6
Pyha! Jeg overvejede en tid, om den mon afsatte plads hvis det nye element's index er < 232...
- Jeg tror jeg læste det 12 gange, før jeg indså, at der ikke er nogen speciel grænse ved 232 : )

Læg et svar og få din medalje : )
Avatar billede arne_v Ekspert
28. april 2011 - 17:44 #7
svar
Avatar billede Slettet bruger
28. april 2011 - 18:42 #8
___________________
\                                          /
  \            Fortjenst          /
  /            Medaljen          \
/__________________\
                    |    |
                    |    |
                    |    |
                  /        \
                /            \
              |    TAK    |
              \                /
                \_____/
                  -------



PS: Jeg nægter at svare på spørgsmål omkring hvor mange previews ovenstående kunstværk kostede!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester