Выразительный JavaScript (Хавербеке) - страница 42

. Доступ к отдельным символам строчки можно получить через метод >charAt, а также просто через нумерацию позиций, как в массиве:

>var string = "abc";

>console.log(string.length);

>// → 3

>console.log(string.charAt(0));

>// → a

>console.log(string[1]);

>// → b

Объект arguments

Когда вызывается функция, к окружению исполняемого тела функции добавляется особая переменная под названием arguments. Она указывает на объект, содержащий все аргументы, переданные функции. Помните, что в JavaScript вы можете передавать функции больше или меньше аргументов, чем объявлено при помощи параметров.

>function noArguments() {}

>noArguments(1, 2, 3); // Пойдёт

>function threeArguments(a, b, c) {}

>threeArguments(); // И так можно

У объекта >arguments есть свойство >length, которое содержит реальное количество переданных функции аргументов. Также у него есть свойства для каждого аргумента под именами 0, 1, 2 и т. д.

Если вам кажется, что это очень похоже на массив – вы правы. Это очень похоже на массив. К сожалению, у этого объекта нет методов типа >slice или >indexOf, что делает доступ к нему труднее.

>function argumentCounter() {

>  console.log("Ты дал мне", arguments.length, "аргумента.");

>}

>argumentCounter("Дядя", "Стёпа", "Милиционер");

>// → Ты дал мне 3 аргумента.

Некоторые функции рассчитаны на любое количество аргументов, как >console.log. Они обычно проходят циклом по свойствам объекта >arguments. Это можно использовать для создания удобных интерфейсов. К примеру, вспомните, как мы создавали записи для журнала Жака:

>addEntry(["работа", "тронул дерево", "пицца", "пробежка", "телевизор"], false);

Так как мы часто вызываем эту функцию, мы можем сделать альтернативу, которую проще вызывать:

>function addEntry(squirrel) {

>  var entry = {events: [], squirrel: squirrel};

>  for (var i = 1; i < arguments.length; i++)

>    entry.events.push(arguments[i]);

>  journal.push(entry);

>}

>addEntry(true, "работа", "тронул дерево", "пицца", "пробежка", "телевизор");

Эта версия читает первый аргумент как обычно, а по остальным проходит в цикле (начиная с индекса 1, пропуская первый аргумент) и собирает их в массив.

Объект Math

Мы уже видели, что >Math – набор инструментов для работы с числами, такими, как >Math.max (максимум), >Math.min (минимум), и >Math.sqrt (квадратный корень).

Объект >Math используется просто как контейнер для группировки связанных функций. Есть только один объект >Math, и он почти не используется в виде значений. Он просто предоставляет пространство имён для всех этих функций и значений, чтоб не нужно было делать их глобальными.