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

Есть также функция >Math.ceil (от «ceiling» – потолок, округляет вверх до ближайшего целого) и >Math.round (округляет до ближайшего целого).

Объект global

К глобальной области видимости, где живут глобальные переменные, можно также получить доступ как к объекту. Каждая глобальная переменная является свойством этого объекта. В браузерах глобальная область видимости хранится в переменной >window.

>var myVar = 10;

>console.log("myVar" in window);

>// → true

>console.log(window.myVar);

>// → 10

Итог

Объекты и массивы (которые представляют из себя подвид объектов) позволяют сгруппировать несколько величин в одну. В принципе, это позволяет нам засунуть несколько связанных между собой вещей в мешок и бегать с ним кругами, вместо того, чтобы пытаться сгребать все эти вещи руками и пытаться держать их каждую по отдельности.

У большинства величин в JavaScript есть свойства, исключение составляют >null и >undefined. Мы получаем доступ к ним через >value.propName или >value["propName"]. Объекты используют имена для хранения свойств и хранят более-менее фиксированное их количество. Массивы обычно содержат переменное количество сходных по типу величин и используют числа (начиная с нуля) в качестве имён этих величин.

Также в массивах есть именованные свойства, такие как >length, и несколько методов. Методы – это функции, живущие среди свойств и (обычно) работающие над той величиной, чьим свойством они являются.

Объекты также могут работать как карты, ассоциируя значения с именами. Оператор >in используется для выяснения того, содержит ли объект свойство с данным именем. Это же ключевое слово используется в цикле >for (>for (var name in object)) для перебора всех свойств объекта.

Упражнения

Сумма диапазона

Во введении был упомянут удобный способ подсчёта сумм диапазонов чисел:

>console.log(sum(range(1, 10)));

Напишите функцию >range, принимающую два аргумента – начало и конец диапазона – и возвращающую массив, который содержит все числа из него, включая начальное и конечное.

Затем напишите функцию >sum, принимающую массив чисел и возвращающую их сумму. Запустите указанную выше инструкцию и убедитесь, что она возвращает 55.

В качестве бонуса дополните функцию >range, чтобы она могла принимать необязательный третий аргумент – шаг для построения массива. Если он не задан, шаг равен единице. Вызов функции >range(1, 10, 2) должен будет вернуть >[1, 3, 5, 7, 9]. Убедитесь, что она работает с отрицательным шагом так, что вызов >range(5, 2, -1) возвращает >[5, 4, 3, 2].

>console.log(sum(range(1, 10)));

>// → 55

>console.log(range(5, 2, -1));