Hvordan definere Array's?

JasonStackhouse

New Member
Hvilken av disse typene definisjonene bør jeg bruke
var list = new Object();
var list = Object.create( null );
var list = new Array( null );

for disse arrayene?

list.foo = ['hello','some stuff'];
list.bar = ['hey', 'Hi'];
list.hello = ['hey', 'Hi'];

Har vært inne i chatten på Stackoverflow uten at jeg helt forstår dette.
 

adeneo

Medlem
I javascript er alt objekter, også array's, men det er visse forskjeller.

Først, følgende er det samme:

PHP:
var list = {}; //definerer et nytt tom object
var list = new Object(); //definerer også ett nytt tomt object

var list2 = []; //definerer ett nytt tomt array
var list2 = new Array(); //definerer også ett nytt tomt array

Den første varianten kalles et objekt, mens den andre kalles et array, selv om alt i javascript egentlig er objekter, også funksjoner og mye annet.

For eksempel kan man definere en funksjon

PHP:
var doSomething = function() {
    alert('Hello Kitty');
}

Ser man nærmere så er det tydelig at det er et objekt, og derfor kan vi også gjøre:

PHP:
var doSomething = {
    doMore: function() {
         alert('mere stasj');
    },
    doLess: function() {
         alert('mindre stasj');
    }
}

doSomething.doMore(); //kaller en av funksjonene i doSomething objektet

Tar vi det litt videre så er altså et objekt normalt bestående av et såkalt key/value par, så vi kan da gjøre :


PHP:
var list = { foo : {hello : 'some stuff'}, bar : {hey : 'Hi'}, hello : {hey: 'Hi'}};

alert( list.foo.hello ); //gir 'some stuff'

Altså er diverse metoder innad i objektet tilgjengelige med "dot notation", altså ved å bruke punktum mellom navnene, men de er også tilgjengelige som :

PHP:
list.foo[hello];

Som kan være greit dersom det er ugyldige tegn eller strenger vi skal hente.

Vanlige array's kan vi definere som :

PHP:
var list = ['hey', 'hi', 'hello'];

men her er verdiene nå kun tilgjengelige som en nummerert nullbasert indeks, altså slik :

PHP:
alert( list[1] ); //gir 'hi'

Du kan også putte arrayer i objekter, og for ditt eksempel så bør du nok gjøre :

PHP:
var list = new Object();
    list.foo = ['hello','some stuff'];
    list.bar = ['hey', 'Hi'];
    list.hello = ['hey', 'Hi'];

Ettersom 'var list' helt klart er et objekt ettersom det brukes "dot notation", og du kunne også definert som :

PHP:
var list2 = {foo: ['hello','some stuff'], bar : ['hey', 'Hi'], hello : ['hey', 'Hi']};

Og fått akkurat det samme objektet, som er tilgjengelig slik :

PHP:
list.foo[0]; //gir 'hello'
list.foo[1]; //gir 'some stuff'

Forøvrig bør det ikke brukes alert() når man holder på med slikt, men ha en vane å logge til konsollen i stedet, da kan man se hele objektet der.
 
Sist redigert:

JasonStackhouse

New Member
I javascript er alt objekter, også array's, men det er visse forskjeller.

Først, følgende er det samme:

PHP:
var list = {}; //definerer et nytt tom object
var list = new Object(); //definerer også ett nytt tomt object

var list2 = []; //definerer ett nytt tomt array
var list2 = new Array(); //definerer også ett nytt tomt array

Den første varianten kalles et objekt, mens den andre kalles et array, selv om alt i javascript egentlig er objekter, også funksjoner og mye annet.

For eksempel kan man definere en funksjon

PHP:
var doSomething = function() {
    alert('Hello Kitty');
}

Ser man nærmere så er det tydelig at det er et objekt, og derfor kan vi også gjøre:

PHP:
var doSomething = {
    doMore: function() {
         alert('mere stasj');
    },
    doLess: function() {
         alert('mindre stasj');
    }
}

doSomething.doMore(); //kaller en av funksjonene i doSomething objektet

Tar vi det litt videre så er altså et objekt normalt bestående av et såkalt key/value par, så vi kan da gjøre :


PHP:
var list = { foo : {hello : 'some stuff'}, bar : {hey : 'Hi'}, hello : {hey: 'Hi'}};

alert( list.foo.hello ); //gir 'some stuff'

Altså er diverse metoder innad i objektet tilgjengelige med "dot notation", altså ved å bruke punktum mellom navnene, men de er også tilgjengelige som :

PHP:
list.foo[hello];

Som kan være greit dersom det er ugyldige tegn eller strenger vi skal hente.

Vanlige array's kan vi definere som :

PHP:
var list = ['hey', 'hi', 'hello'];

men her er verdiene nå kun tilgjengelige som en nummerert nullbasert indeks, altså slik :

PHP:
alert( list[1] ); //gir 'hi'

Du kan også putte arrayer i objekter, og for ditt eksempel så bør du nok gjøre :

PHP:
var list = new Object();
    list.foo = ['hello','some stuff'];
    list.bar = ['hey', 'Hi'];
    list.hello = ['hey', 'Hi'];

Ettersom 'var list' helt klart er et objekt ettersom det brukes "dot notation", og du kunne også definert som :

PHP:
var list2 = {foo: ['hello','some stuff'], bar : ['hey', 'Hi'], hello : ['hey', 'Hi']};

Og fått akkurat det samme objektet, som er tilgjengelig slik :

PHP:
list.foo[0]; //gir 'hello'
list.foo[1]; //gir 'some stuff'

Forøvrig bør det ikke brukes alert() når man holder på med slikt, men ha en vane å logge til konsollen i stedet, da kan man se hele objektet der.

Tusen takk for forklaringen! Er fortsatt bare litt over begynnelsen på "eventyret" mitt i JavaScript. Takk for at du fikk meg til å forstå mer om objekter :D


Hei.
Ville gjort dette: var myArray = new Array();
myArray[0] = "Item1";
myArray[1] = "Item2";

Har nødt til å definere disse med et navn, desverre.
 

adeneo

Medlem
Ja, du kan godt sette de på hver sin linje, det spiller ingen rolle det blir akkurat det samme som det nederste eksempelet i innlegget mitt ovenfor.

Bare pass på at du ikke kan dele strenger over flere linjer uten å escape eller bruke plusstegn :

PHP:
var bar = {
    foo : "Alle barna spiste hamburger, 
           unntatt Ronny, 
           det var hans ponny.";
    }

Går veldig dårlig?
 
Topp