Просто чтобы добавить к превосходный ответ Шона , в JavaScript вы можете использовать либо пунктирную запись, либо запись в скобках для доступа к свойствам объекта.Итак:
var a = []; // Same thing as a = new Array();
alert(a.length); // alerts 0
alert(a['length']); // ditto
var x = 'len';
alert(a[x + "gth"]); // ditto
и аналогично
var a = [];
a.length = 3; // That's fine, the array's length is now 3
a['length'] = 4; // And now it's four
var x = 'len';
a[x + "gth"] = 5; // And now it's five
Итак, вы пытались установить длину (в строку).Свойство length
экземпляров массива является особым, и (как вы обнаружили) должно быть неотрицательным конечным целочисленным значением.
Касательная : На самом деле,Свойство length
- это одна из трех особых особенностей массивов (одна из которых на самом деле не такая уж особенная).Различия * между массивом и простым объектом:
- У него есть специальный класс имен свойств, которые представляют собой числовые, десятичные строки.Мы склонны называть их «индексами массивов» и записывать их в виде чисел, но это не так.
a[0]
действительно означает a["0"]
, что означает "свойство '0' объекта a
", так же как a["foo"]
означает "свойство 'foo" объекта a
. Специальное свойство length
: оно всегда на единицу больше, чем числовое значение свойства с наименьшим десятичным числовым именем строки (например, наибольшим «индексом массива»), или заданным вами значением, в зависимости от того, какое значение больше.
var a = [];
a[0] = "foo"; // a.length is automatically set to 1
a[4] = "bar"; // a.length is automatically set to 5
a.length = 3; // a.length is now 3, and any properties that have numeric
// decimal string names of "3" or higher are deleted, thus:
alert(a[4]); // "undefined"
- Экземпляры массива создаются с помощью функции конструктора
Array
, поэтому они имеют прототип Array.prototype
со всеми его полезными полезными функциями.
Вот и все. Они практически не похожи на массивы почти во всех других языках. Они, например, не являются непрерывными блоками памяти (хотя реализация может реализовать их таким образом, если захочет; это, вероятно, будет неэффективно).