2011-01-07 16 views

Odpowiedz

6

Ponieważ jest to obiekt, który składa się z właściwościami i przyjąć postać par klucz/wartość (koncepcyjnie podobny do tablicy asocjacyjnej, lub stolik hash) trzeba będzie zrobić coś takiego:

Object.size = function(obj) { 
    var size = 0, key; 
    for (key in obj) { 
     if (obj.hasOwnProperty(key)) size++; 
    } 
    return size; 
}; 

var array = []; 
array["foo"] = "bar"; 
array["bar"] = "foo"; 

var size = Object.size(array); 

Demo: http://jsfiddle.net/gBG34/

+1

Lub też: Object.prototype.size = function() ... A następnie możesz użyć go jak: var size = array.size() –

+0

... lub jako zwykły-stary funkcji, i po prostu wykonaj ' getSize (var); ' – karim79

+3

Nie ma czegoś takiego jak tablica asocjacyjna w JS. Jest to obiekt i tylko alternatywna składnia, aby uzyskać dostęp do jego właściwości. Zamiast 'array [" foo "]' możesz równie dobrze napisać 'tablica.foo'. Dlatego właściwość długości nie działa. Ustawia właściwości obiektu tablicy i nie dodaje elementów do tablicy. – DanMan

1

zasadzie kiedy robisz

array["foo"] = "bar"

to tylko dodaje trochę więcej atrybutów do tablicy, która jest obiektem. W javascript, array.foo i array ['foo'] oznaczają to samo.

+0

Dzięki za wyjaśnienie, że na zewnątrz. Ale nie odpowiada na pytanie? – Mantar

+1

Nie przekształca go w obiekt. Tablice * to * obiekty, więc możesz ustawić na nich dowolne właściwości. – lonesomeday

0

Może jestem naiwny jest (moja JavaScript nie jest, co to może być), ale nie powinno to być coś takiego:

var array = []; 
array[0] = "bar"; 
array[1] = "foo"; 
document.write(array.length); 
0

Rzeczywisty rozmiar wynosi 0, ponieważ nie umieścić dowolny elementy do obiektu tablicowego - można to zrobić tylko za pomocą metody (push itp.) lub poprzez przypisanie wartości do indeksowanej właściwości (lub w konstruktorze).

4

ustawiasz właściwość na tablicy, nie nadając mu nowy element. Tablice mogą odbierać dowolne właściwości, tak jak każdy inny obiekt JavaScript. Na przykład:

var foo = []; 
foo.bar = 'foobar'; 
console.log(foo.bar); // outputs 'foobar' 
console.log(foo); // outputs [] -- empty array 

Aby dodać elementy do tablicy, należy Array.push:

var foo = []; 
foo.push('foobar'); 
console.log(foo); // outputs ['foobar'] 

Jeśli chcesz pary klucz => wartość, należy użyć obiektu w zamian:

var foo = {}; 
foo['bar'] = 'foobar'; 
console.log(foo); // outputs {bar: 'foobar'} 
7

First off , długość wynosi 0, ponieważ liczba pozycji w array wynosi 0.

Kiedy robisz składnia ta tworzy właściwość o nazwie foo o wartości bar. Długość jest nadal 0, ponieważ nie dodałeś niczego do tablicy, właśnie wyznaczają nowe właściwości na tablicy

wersja robocza tutaj: http://jsfiddle.net/VyjJD/3/

var array = []; 

array["foo"] = "bar"; 
array["bar"] = "foo"; 
array.bin = function() { return "bin"; }; 

array[0] = "bar"; 
array[1] = "foo"; 
array[2] = "bin"; 
array[3] = "bat"; 

var props = 0; 

for (key in array) 
    props++; 

document.write(array.length + "<br />" 
      + props + "<br />" 
      + (array.foo == array["foo"]) + "<br />" 
      + array.bar + "<br />" 
      + array.bin()); 

Uwaga, array.length = 4 ale props = 7 który jest wszystkim właściwości i liczbę elementów w tablicy.

+0

+100. Świetne wyjaśnienie. Dziękuję Ci. – Radek