JavaScript 1.3: добавлен метод toSource;
изменено свойство length; изменены методы
push и splice.
Версия ECMA
ECMA-262
Создание
Конструктор Array - объекта:
new Array(arrayLength) new Array(element0, element1, ..., elementN)
Литерал массива:
[element0, element1, ..., elementN]
JavaScript 1.2, если специфицирован LANGUAGE="JavaScript1.2" в
тэге<SCRIPT>:
new Array(element0, element1, ..., elementN)
JavaScript 1.2, если LANGUAGE="JavaScript1.2" не специфицирован
в тэге <SCRIPT> :
new Array([arrayLength]) new Array([element0[, element1[, ..., elementN]]])
JavaScript 1.1:
new Array([arrayLength]) new Array([element0[, element1[, ..., elementN]]])
Параметры
arrayLength
Начальный размер массива. Вы можете получить доступ к этому значению через
свойство length. Если специфицировано не-число, создаётся массив
размером length 1 с первым элементом, имеющим специфицированное значение.
Максимальный допустимый размер массива 4,294,967,295.
elementN
Список значений элементов массива.
Если специфицирована эта форма, массив инициализируется специфицированными
значениями как элементами массива, а свойство length содержит количество аргументов.
Описание
Массив является упорядоченным набором значений, ассоциированных с одним именем переменной.
В этом примере создаётся Array -объект с литералом массива;
массив coffees состоит из трёх элементов и имеет размер "три":
coffees = ["French Roast", "Columbian", "Kona"]
Индексирование массива
Массив индексируется порядковыми числами. Например, у Вас имеется массив:
myArray = new Array("Wind","Rain","Fire")
Вы обращаетесь к первому элементу массива myArray[0], а ко второму
элементу - myArray[1].
Специфицирование единственного параметра
Если Вы специфицируете одиночный числовой параметр в Array
-конструкторе, Вы задаёте начальный размер массива. Следующий код создаёт массив из 5 элементов:
billingMethod = new Array(5)
Поведение Array -конструктора зависит от того, является ли единственный параметр числом:
Если специфицировано число, конструктор конвертирует его в беззнаковое
32-битное целое и генерирует массив со свойством length (размер
массива), содержащим это целое число. Массив сначала не содержит элементов,
хотя и может иметь ненулевой размер.
Если специфицировано не-число, создаётся массив размером 1 с первым элементом,
имеющим специфицированное значение.
Этот код создаёт массив размером 25, затем присваивает значения первым трём элементам:
Вы можете создать плотный массив из двух или более элементов, начиная с
индекса 0, если Вы определяете начальные значения для всех элементов. Плотным
является такой массив, в котором все элементы имеют значения.
Следующий код создаёт плотный массив из 3 элементов:
myArray = new Array("Hello", myVar, 3.14159)
Косвенное увеличение размера массива
Размер массива увеличивается, если Вы присваиваете значение элементу с большим
индексом, чем в текущем размере массива. Следующий код создаёт массив размером 0,
затем присваивает значение элементу 99. Это изменяет размер массива до 100.
colors = new Array() colors[99] = "midnightblue"
Создание массива с использованием результата
совпадения
Результат совпадения регулярного выражения и строки может образовать массив.
Этот массив имеет свойства и элементы, предоставляющие информацию о совпадении.
Массив это return-значение методов RegExp.exec, String.match и String.replace.
Чтобы лучше разобраться в этих свойствах и элементах, посмотрим на следующий пример и на таблицу:
<SCRIPT LANGUAGE="JavaScript1.2">
//Совпадает с одной d, с последующей одной или более b, с последующей одной d //Запоминаются совпавшие b и последующая d //Регистр игнорируется
Свойства и
элементы, возвращаемые этим совпадением:
Свойство/Элемент
Описание
Пример
input
Свойство только для чтения, отражает строку-оригинал, относительно которой
сравнивается регулярное выражение.
cdbBdbsbz
index
Свойство только для чтения, которое является индексом с базой 0 совпадения в строке.
1
[0]
Элемент только для чтения, который специфицирует последние совпавшие символы.
dbBd
[1], ...[n]
Элемент только для чтения, который специфицирует совпадения закавыченных
подстрок, если включён в регулярное выражение. Количество закавыченных
подстрок не ограничивается.
[1]=bB [2]=d
Обратная Совместимость
JavaScript 1.2
Если Вы специфицируете единственный параметр в конструкторе
Array, поведение будет зависеть того, специфицирован ли параметр LANGUAGE="JavaScript1.2"
в тэге <SCRIPT>:
Если специфицирован LANGUAGE="JavaScript1.2" в тэге <SCRIPT>,
возвращается массив из одного элемента. Например, new Array(5)
создаёт одноэлементный массив с первым элементом 5. Конструктор с единственным
параметром работает так же, как и конструктор с несколькими параметрами. Вы не
можете специфицировать свойство length объекта Array,
используя конструктор с единственным параметром.
Если LANGUAGE="JavaScript1.2"
в тэге <SCRIPT> не специфицирован, Вы указываете начальный
размер массива, как и в других версиях JavaScript.
JavaScript 1.1 и ранее
Если Вы специфицируете единственный параметр в конструкторе
Array, Вы специфицируете начальный размер массива. Следующий код создаёт массив из пяти элементов:
billingMethod = new Array(5)
JavaScript 1.0
Вы обязаны индексировать массив по порядковому номеру; например, myArray[0].
Для массива, созданного в
результате совпадения с регулярным выражением, отражает строку-оригинал,
относительно которой выполняется подстановка регулярного выражения.
Возвращает литерал массива, представляющий специфицированный массив; Вы можете
использовать это значение для создания нового массива. Переопределяет метод Object.toSource.
Следующий пример создаёт массив msgArray с размером 0, затем
присваивает значения элементам msgArray[0] и msgArray[99],
изменяя размер массива на 100.
msgArray = new Array() msgArray[0] = "Hello" msgArray[99] = "world"
// Следующий оператор является true, // поскольку был определён элемент msgArray[99].
if (msgArray.length == 100)
myVar="The length is 100."
concat не изменяет начальные массивы, но возвращает копию "на
один уровень глубже", содержащую копии элементов, скомбинированные из
массивов-оригиналов. Элементы массивов-оригиналов копируются в новый массив таким образом:
Ссылки на объекты (а не реальные объекты): concat копирует
ссылки на объекты в новый массив. И массив-оригинал, и новый массив ссылаются
на один и тот же объект. Если изменяется оригинальный объект,
эти изменения отражаются и в новом массиве, и в массиве-оригинале.
Строки и числа (не объекты String и Number): concat копирует строки и числа в новый массив.
Изменение строки или числа одного массива не влияет на другие массивы.
Если в любой массив добавляется новый элемент, другой массив остаётся без изменений.
Следующий код объединяет два массива:
alpha=new Array("a","b","c") numeric=new Array(1,2,3) alphaNumeric=alpha.concat(numeric) // новый массив ["a","b","c",1,2,3]
Специфицирует функцию, создающую прототип объекта. Обратите внимание, что
значением этого свойства является ссылка на функцию, а не строка, содержащая имя функции.
Для массива, созданного в результате совпадения с регулярным выражением,
отражает строку-оригинал, относительно которой выполняется совпадение
регулярного выражения.
Строка, разделяющая элементы массива. Сепаратор конвертируется при
необходимости в строку. Если отсутствует, элементы массива разделяются запятой.
Описание
Результаты конвертации всех элементов массива в строки
объединяются в одну строку.
Примеры
Следующий пример создаёт массив a
из трёх элементов, затем объединяет их в массив три раза: используя сепаратор по
умолчанию, запятую и пробел, а затем знак +.
JavaScript 1.3: length
является беззнаковым 32-битным целым числом со значением меньше 232.
Версия ECMA
ECMA-262
Описание
Значением свойства length является целое
положительное число со значением, меньшим чем 2 в степени 32 (232).
Вы можете установить свойство length в любое время для усечения
массива. Если Вы увеличиваете массив, изменяя его свойство length,
реальное количество элементов не увеличивается; например, если Вы устанавливаете length
в 3, когда оно в данный момент равно 2, массив будет продолжать содержать только два элемента.
Примеры
В следующем примере функция getChoice использует свойство
length для итерации по элементам массива musicType.
musicType это элемент select на форме musicForm.
function getChoice() { for (var i = 0; i < document.musicForm.musicType.length;
i++) { if (document.musicForm.musicType.options[i].selected == true)
{ return
document.musicForm.musicType.options[i].text } } }
В следующем примере массив statesUS укорачивается до размера 50,
если текущий его размер больше 50.
if (statesUS.length > 50) { statesUS.length=50 }
pop
Удаляет последний элемент из массива и
возвращает этот элемент. Этот метод изменяет размер массива.
Предоставляет прототип для данного класса. Вы можете использовать prototype
для добавления свойств или методов во все экземпляры класса. О прототипах см. Function.prototype.
JavaScript 1.3: push возвращает новый размер массива, а не
последний элемент, добавленный в массив.
Синтаксис
push(element1, ..., elementN)
Параметры
element1, ..., elementN
Элементы, добавляемые в конец массива.
Описание
Поведение метода push аналогично действию
функции push в Perl 4. Обратите внимание, что это поведение
отличается в Perl 5.
Обратная Совместимость
JavaScript 1.2. Метод push возвращает последний элемент, добавленный в массив.
Пример
Следующий код создаёт массив myFish из двух элементов,
затем добавляет в него два элемента. После выполнения кода pushed содержит 4.
(В JavaScript 1.2 pushed содержит "lion" после выполнения кода.)
Индекс с базой 0, начиная с которого выполняется извлечение.
end
Индекс с базой 0, с которого извлечение прекращается:
slice извлекает элементы до end, не включительно. slice(1,4)
извлекает элементы со второго по четвёртый (элементы с индексами 1, 2 и 3)
Если задан отрицательный индекс, end указывает смещение от конца массива.
slice(2,-1) извлекает элементы с третьего и до последнего.
Если end отсутствует, slice извлекает до конца
последовательности.
Описание
slice
не изменяет массив-оригинал, а возвращает новую копию "на один уровень глубже",
содержащую копии элементов, извлечённых из массива-оригинала. Элементы
массива-оригинала копируются в новый массив так:
Для ссылок на объекты (а не для реальных объектов)
slice копирует ссылки на объект в новый массив. Новый и
оригинальный массивы ссылаются на один и тот же объект. Если объект, на который
ссылаются, изменяется, эти изменения появляются в обоих массивах.
Для строк и чисел (не объектов String
и Number) slice
копирует строки и числа в новый массив. Изменение строки или числа в одном
массиве не влияет на другой массив.
Если в любой массив добавляется новый элемент, другой
массив не изменяется.
Пример
В следующем примере slice создаёт новый массив newCar
из myCar. Оба массива содержат ссылку на объект myHonda.
Если цвет/color объекта
myHonda изменяется на purple, это изменение отражается
в обоих массивах.
//Записываются значения myCar, newCar и цвет для myHonda, //на который ссылаются из обоих массивов.
document.write("myCar = " + myCar + "<BR>")
document.write("newCar = " + newCar + "<BR>")
document.write("myCar[0].color = " + myCar[0].color + "<BR>")
document.write("newCar[0].color = " + newCar[0].color + "<BR><BR>")
//Изменяется цвет myHonda.
myHonda.color = "purple"
document.write("The new color of my Honda is " + myHonda.color + "<BR><BR>")
//Записывается цвет myHonda, на который ссылаются из обоих массивов.
document.write("myCar[0].color = " + myCar[0].color + "<BR>")
document.write("newCar[0].color = " + newCar[0].color + "<BR>")
</SCRIPT>
Этот
скрипт запишет:
myCar = [{color:"red", wheels:4, engine:{cylinders:4, size:2.2}}, 2,
"cherry condition", "purchased 1997"] newCar = [{color:"red", wheels:4,
engine:{cylinders:4, size:2.2}}, 2] myCar[0].color = red newCar[0].color = red The new color of
my Honda is purple myCar[0].color = purple newCar[0].color = purple
Специфицирует функцию, определяющую порядок сортировки. Если отсутствует, массив
сортируется лексикографически (в словарном порядке) в соответствии с
конвертацией в строку каждого элемента.
Описание
Если compareFunction не предоставляется, элементы сортируются путём
конвертации их в строки и сравнения строк в лексикографическом порядке ("словарном
порядке" или "порядке телефонной книги", а не в числовом порядке).
Например, "80" в словарном порядке идёт перед "9", а в числовом 9 идёт перед 80.
Если параметр compareFunction предоставлен,
элементы массива сортируются в соответствии с return-значением сравнивающей
функции. Если a и b являются сравниваемыми элементами, то:
Если compareFunction(a, b) меньше 0, b
сортируется с меньшим индексом, чем a.
Если compareFunction(a, b) возвращает 0, a и b
не изменяют своего положения друг относительно друга, но сортируются
относительно всех других элементов.
Если compareFunction(a, b) больше 0, b сортируется с большим индексом, чем
a.
Итак, функция сравнения имеет следующую форму:
function compare(a, b) { if (a меньше b по некоторому критерию сортировки) return -1 if (a больше b по некоторому критерию сортировки) return 1 // иначе a обязано быть равно b return 0 }
Для сравнения чисел, а не строк, функция сравнения может просто вычитать b из a:
function compareNumbers(a, b) { return a - b }
JavaScript использует стабильную сортировку:
относительное расположение a и b не меняется, если a и b равны. Если до
сортировки индекс a был меньше, чем индекс b, он будет меньше и после сортировки
вне зависимости от того, как a и b будут перемещены в ходе сортировки.
Поведение метода sort различается в версиях JavaScript 1.1 и JavaScript 1.2.
В JavaScript 1.1, на некоторых платформах, метод sort
не работает. Этот метод работает на всех платформах в JavaScript 1.2.
В JavaScript 1.2 этот метод больше не конвертирует undefined-элементы в null;
вместо этого он сортирует их в конец массива. Например, у вас имеется такой скрипт:
<SCRIPT> a = new Array(); a[0] = "Ant"; a[5] = "Zebra";
function writeArray(x) { for (i = 0; i < x.length; i++)
{ document.write(x[i]); if
(i < x.length-1) document.write(", "); } }
Следующий пример создаёт 4 массива и отображает
массив-оригинал, а затем - отсортированные массивы. Числовые массивы сортируются
сначала без, затем - с использованием функции сравнения.
<SCRIPT> stringArray = new Array("Blue","Humpback","Beluga")
numericStringArray = new Array("80","9","700") numberArray = new Array(40,1,5,200)
mixedNumericArray = new Array("80","9","700",40,1,5,200)
document.write("<B>numberArray:</B> " + numberArray.join()
+"<BR>") document.write("<B>Sorted without a compare function:</B> "
+ numberArray.sort() +"<BR>") document.write("<B>Sorted with compareNumbers:</B> "
+ numberArray.sort(compareNumbers) +"<P>")
document.write("<B>numericStringArray:</B> "
+ numericStringArray.join() +"<BR>") document.write("<B>Sorted without a compare
function:</B> " + numericStringArray.sort() +"<BR>") document.write("<B>Sorted
with compareNumbers:</B> " + numericStringArray.sort(compareNumbers) +"<P>")
document.write("<B>mixedNumericArray:</B> "
+ mixedNumericArray.join() +"<BR>") document.write("<B>Sorted without a compare
function:</B> " + mixedNumericArray.sort() +"<BR>") document.write("<B>Sorted with
compareNumbers:</B> " + mixedNumericArray.sort(compareNumbers) +"<BR>") </SCRIPT>
На выводе будет получено следующее. Как видно ввода,
если функция сравнения используется, числа сортируются корректно, если они
являются числами или строками из цифр.
Целое число, обозначающее количество удаляемых элементов старого массива. Если
howMany равно 0, элементы не удаляются. В это случае Вы должны
специфицировать как минимум один новый элемент.
element1, ..., elementN
Элементы, добавляемые к
массиву. Если Вы не специфицируете элементы, splice просто удаляет элементы из массива.
Описание
Если Вы специфицируете разные количества удаляемых и вставляемых элементов,
массив будет иметь по окончании вызова другой размер.
Метод splice возвращает массив, содержащий удалённые элементы. Если
удаляется только один элемент, возвращается массив, состоящий из одного элемента.
Обратная Совместимость
JavaScript 1.2. Метод splice
возвращает удаляемый элемент, если удаляется только один элемент
(параметр howMany равен 1); иначе метод возвращает массив,
содержащий удалённые элементы.
Пример
Следующий скрипт иллюстрирует использование splice:
Объект Array переопределяет метод toString
из Object. Для Array
-объектов метод toString объединяет массив и возвращает одну
строку, содержащую все элементы массива, разделённые запятыми. Например,
следующий код создаёт массив и использует toString для конвертации
массива в строку.
var monthNames = new Array("Jan","Feb","Mar","Apr")
myVar=monthNames.toString() // присваивает "Jan,Feb,Mar,Apr" переменной myVar
JavaScript вызывает метод toString
автоматически, когда массив представляется как текстовое значение или когда к
массиву обращаются при конкатенации строк.
Обратная Совместимость
JavaScript 1.2.
В JavaScript 1.2 и более ранних версиях метод
toString возвращает строку, представляющую исходный код массива.
Это то же самое значение, что и возвращаемое методом toSource в JavaScript 1.3
и более поздних версиях.
Объект Array
наследует метод valueOf из Object.
Метод valueOf объекта Array возвращает примитивное значение
массива или примитивное значение его элементов так:
Тип объекта элемента
Тип данных возвращаемого значения
Boolean
Boolean
Number или Date
number
Все прочие
string
Этот метод обычно вызывается в JavaScript внутренне, а не явно в коде.