Выбрать главу

7.8.7. Методы push() и рор()

Методы push() и рор() позволяют работать с массивами как со стеками. Метод push() добавляет один или несколько новых элементов в конец массива и возвращает его новую длину. Метод pop() выполняет обратную операцию - удаляет последний элемент массива, уменьшает длину массива и возвращает удаленное им значение. Обратите внимание, что оба эти метода изменяют исходный массив, а не создают его модифицированную копию. Комбинация push() и рор() позволяет на основе массива реализовать стек с дисциплиной обслуживания «первым вошел - последним вышел». Например:

var stack = [];  // стек: []

stack.push(1,2): // стек: [1,2] Вернет 2

stack.pop();     // стек: [1] Вернет 2

stack.push(3);   // стек: [1,3] Вернет 2

stack.pop();     // стек: [1] Вернет 3

stack.push([4,5]); // стек: [1,[4,5]] Вернет 2

stack.рор()      // стек: [1] Вернет [4,5]

stack.рор();     // стек: [] Вернет 1

7.8.8. Методы unshift() и shift()

Методы unshift() и shift() ведут себя почти так же, как push() и рор(), за исключением того, что они вставляют и удаляют элементы в начале массива, а не в конце. Метод unshift() смещает существующие элементы в сторону больших индексов для освобождения места, добавляет элемент или элементы в начало массива и возвращает новую длину массива. Метод shift() удаляет и возвращает первый элемент массива, смещая все последующие элементы на одну позицию вниз, чтобы занять место, освободившееся в начале массива. Например:

var а = []; // а:[]

a.unshift(1); // а:[1] Вернет: 1

a.unshift(22); // а:[22,1] Вернет: 2

a.shift(); // а:[1] Вернет: 22

a.unshift(3,[4,5]); // а:[3,[4,5],1] Вернет: 3

a.shift(); // а:[[4,5], 1 ] Вернет: 3

a.shift(); // а:[1] Вернет: [4,5]

a.shift(); // а:[] Вернет: 1

Обратите внимание на поведение метода unshift() при вызове с несколькими аргументами. Аргументы вставляются не по одному, а все сразу (как в случае с методом splice()). Это значит, что в результирующем массиве они будут следовать в том же порядке, в котором были указаны в списке аргументов. Будучи вставленными по одному, они бы расположились в обратном порядке.

7.8.9. Методы toString() и toLocaleString()

Массивы, как и любые другие объекты в JavaScript, имеют метод toString(). Для массива этот метод преобразует каждый его элемент в строку (вызывая в случае необходимости методы toString() элементов массива) и выводит список этих строк через запятую. Примечательно, что результат не включает квадратные скобки или какие-либо другие разделители вокруг значений массива. Например:

[1,2,3].toString() //Получается '1,2,3'

["а", "Ь", "с"]. toString() // Получается а,Ь,с'

[1, [2, 'с']].toString() //Получается '1,2,с'

Обратите внимание, что toString() возвращает ту же строку, что и метод join() при вызове его без аргументов.

Метод toLocaleString() - это локализованная версия toString(). Каждый элемент массива преобразуется в строку вызовом метода toLocaleString() элемента, а затем полученные строки объединяются с использованием специфического для региона (и определяемого реализацией) разделителя.

7.9. Методы класса Array, определяемые стандартом ECMAScript 5

Стандарт ECMAScript 5 определяет девять новых методов массивов, позволяющих выполнять итерации, отображение, фильтрацию, проверку, свертку и поиск. Все эти методы описываются в следующих далее подразделах.

Однако, прежде чем перейти к изучению особенностей, следует сделать некоторые обобщения, касающиеся методов массивов в ECMAScript 5. Во-первых, большинство описываемых ниже методов принимают функцию в первом аргументе и вызывают ее для каждого элемента (или нескольких элементов) массива. В случае разреженных массивов указанная функция не будет вызываться для несуществующих элементов. В большинстве случаев указанной функции передаются три аргумента: значение элемента массива, индекс элемента и сам массив. Чаще всего вам необходим будет только первый аргумент, а второй и третий аргументы можно просто игнорировать. Большинство методов массивов, введенных стандартом ECMAScript 5, которые в первом аргументе принимают функцию, также принимают второй необязательный аргумент. Если он указан, функция будет вызываться, как если бы она была методом этого второго аргумента. То есть второй аргумент будет доступен функции, как значение ключевого слова this. Значение, возвращаемое функцией, играет важную роль, но разные методы обрабатывают его по-разному. Ни один из методов массивов, введенных стандартом ECMAScript 5, не изменяет исходный массив. Разумеется, функция, передаваемая этим методам, может модифицировать исходный массив.