Вход/Регистрация
JavaScript. Подробное руководство, 6-е издание
вернуться

Флэнаган Дэвид

Шрифт:

console.log([х,у]);// Выведет [3,2]

Обратите внимание, как присваивание с разложением упрощает работу с функциями, возвращающими массивы значений:

// Преобразует координаты [х,у] в полярные координаты [r,theta]

function polar(x,y) {

return [Math.sqrt(x*x+y*y), Math.atan2(y,x)];

}

// Преобразует полярные координаты в декартовы координаты

function cartesian(r,theta) {

return [r*Math.cos(theta), r*Math.sin(theta)];

}

let [r,theta] = polar(1.0. 1.0); // r=Math.sqrt(2), theta=Math.PI/4

let [x,y] = cartesian(r,theta); // x=1.0, y=1.0

При выполнении присваивания с разложением количество переменных слева не обязательно должно совпадать с количеством элементов массива справа. Лишние переменные слева получат значения undefined, а лишние значения справа будут просто игнорироваться. Список переменных слева может включать дополнительные запятые, чтобы пропустить определенные значения справа:

let [х,у] = [1]; // х = 1, у = undefined

[х,у] = [1,2,3]; // х = 1, у = 2

[,х,,у] = [1,2,3,4]; // х = 2, у = 4

В JavaScript отсутствует синтаксическая конструкция, которая позволила бы присвоить переменной все оставшиеся или неиспользованные значения (как массив). Так, во второй строке в примере выше, отсутствует возможность присвоить переменной у остаток массива [2,3].

Значением инструкции присваивания с разложением является полная структура данных справа, а не отдельные значения, извлеченные из нее. То есть из операторов присваивания можно составлять «цепочки», как показано ниже:

let first, second, all;

all = [first,second] = [1,2,3,4]; // first=1, second=2, all=[1,2,3,4]

Присваивание с разложением можно даже использовать для извлечения значений из вложенных массивов. В этом случае левая сторона инструкции присваивания должна выглядеть как литерал вложенного массива:

let [one, [twoA, twoB]] = [1, [2,2.5], 3]; // one=1, twoA=2, twoB=2.5

Присваивание с разложением можно также выполнять, когда справа находится объект. В этом случае конструкция слева должна выглядеть как литерал объекта: список пар имен свойств и имен переменных, разделенных запятыми, заключенный в фигурные скобки. Имя слева от каждого двоеточия - это имя свойства, а имя справа от каждого двоеточия - это имя переменной. Каждое свойство, указанное слева, будет отыскиваться в объекте справа от оператора присваивания, и его значение (или undefined) будет присвоено соответствующей переменной. Эта разновидность присваивания с разложением может сбивать с толку, особенно если в качестве имен свойств и переменных используются одни и те же идентификаторы. Необходимо понимать, что в примере ниже r, g и b - это имена свойств, a red, green и blue - имена переменных:

let transparent = {r:0.0, g:0.0, b:0.0, а:1.0}; // Цвет в формате RGBA

let {r:red, g:green, b:blue} = transparent; // red=0.0,green=0.0,blue=0.0

Следующий пример копирует глобальные функции из объекта

Math
в переменные с целью упростить программирование большого количества тригонометрических операций:

// То же, что и let sin=Math.sin, cos=Math.cos, tan=Math.tan

let {sin:sin, cos:cos, tan:tan} = Math;

Подобно тому как присваивание с разложением может использоваться при работе с вложенными массивами, эта операция может использоваться при работе с вложенными объектами. В действительности, эти два синтаксиса можно комбинировать для описания произвольных структур данных. Например:

// Вложенная структура данных: объект содержит массив объектов

  • Читать дальше
  • 1
  • ...
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: