Чтение онлайн

на главную - закладки

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

• Выражение, стоящее перед ключевым словом

for
, представляет собой эквивалент тела цикла. После того как значение, возвращаемое итератором, будет присвоено переменной и пройдет проверку условным выражением, будет вычислено значение этого выражения, и полученный результат будет добавлен в создаваемый массив.

Ниже приводятся несколько более конкретных примеров, которые помогут лучше понять синтаксис:

data = [2,3,4, -5]; // Массив чисел

squares = [х*х for each (х in data)]; // Квадраты всех чисел: [4,9,16,25]

// Извлечь квадратные корни из всех неотрицательных элементов

roots = [Math.sqrt(x) for each (x in data) if (x >= 0)]

// Создать массив с именами свойств объекта

о = {а:1, b:2, f: function{}}

let allkeys = [p for (p in o)]

let ownkeys = [p for (p in o) if (o.hasOwnProperty(p))]

let notfuncs = [k for ([k,v] in Iterator(o)) if (typeof v !== "function")]

11.4.5. Выражения-генераторы

В JavaScript 1.8 [23]

можно заменить квадратные скобки в генераторах массивов круглыми скобками и получить выражения-генераторы. Выражение-генератор похоже на генератор массивов (синтаксис в круглых скобках в точности соответствует синтаксису в квадратных скобках), но его значением является объект генератора, а не массив. Преимущество выражений-генераторов перед генераторами массивов в том, что они используют прием отложенных вычислений - вычисления выполняются по мере необходимости, а не все сразу - и позволяют обрабатывать даже бесконечные последовательности. Недостаток генераторов состоит в том, что они обеспечивают только последовательный доступ к своим элементам. То есть, в отличие от массивов, генераторы не позволяют обращаться к элементам по индексам: чтобы получить n-е значение, придется выполнить n-1 итераций.

23

На момент написания этих строк выражения-генераторы не поддерживались в Rhino.

Ранее в этой главе мы реализовали функцию map:

// Функция-генератор, возвращающая f(х) для каждого элемента х итерируемого объекта і

function map(і. f) {

fоr(let x in і) yield f(x);

}

Выражения-генераторы позволяют избежать необходимости создавать или использовать такую функцию map. Чтобы получить новый генератор h, возвращающий f (х) для каждого значения х, возвращаемого генератором g, достаточно использовать такой программный код:

let h = (f(x) for (x in g));

Используя генератор eachline из примера 11.1, можно реализовать отсечение пробельных символов, а также фильтрацию комментариев и пустых строк, как показано ниже:

let lines = eachline(text);

let trimmed = (l.trim for (1 in lines));

let nonblank = (1 for (1 in trimmed) if (1.length > 0 && 1[0]!='#'));

11.5. Краткая форма записи функций

В JavaScript 1.8 [24]

появилась возможность краткой записи простых функций (называется «лексическим замыканием»). Если функция вычисляет единственное выражение и возвращает его значение, ключевое слово

return
и фигурные скобки, окружающие тело функции, можно опустить и просто поместить выражение сразу после списка аргументов. Например:

24

На момент написания этих строк данная особенность не поддерживалась в Rhino.

let succ = function(x) х+1, yes = function true, no = function false;

Это просто и удобно: функции, определяемые таким способом, ведут себя как обычные функции, в определении которых присутствуют фигурные скобки и ключевое слово

return
. Этот сокращенный синтаксис удобно использовать, в частности, при передаче функций другим функциям. Например:

// Отсортировать массив в обратном порядке

data.sort(function(a,b) b-a);

// Определение функции, которая возвращает сумму квадратов элементов массива

let sumOfSquares = function(data)

Array.reduce(Array.map(data, function(x) x*x), function(x,y) x+y);

11.6. Множественные блоки catch

В JavaScript 1.5 инструкция

try/catch
была добавлена возможность использовать несколько блоков
catch
. Чтобы использовать эту возможность, необходимо, чтобы за именем параметра блока
catch
следовало ключевое слово
if
и условное выражение:

try {

// здесь могут возбуждаться исключения нескольких типов

throw 1;

}

catch(e if е instanceof ReferenceError) {

// Здесь обрабатывается исключение обращения к неопределенному имени

}

catch(e if е === "quit”) {

// Обработка исключения, получаемое в результате возбуждения сроки "quit"

}

catch(e if typeof e === "string") {

// Здесь обрабатываются все остальные строковые исключения

}

catch(e) {

// Здесь обрабатываются любые другие исключения

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

Проданная Истинная. Месть по-драконьи

Белова Екатерина
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Проданная Истинная. Месть по-драконьи

Кодекс Охотника. Книга XXIII

Винокуров Юрий
23. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXIII

Вперед в прошлое 2

Ратманов Денис
2. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 2

Стражи душ

Кас Маркус
4. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Стражи душ

Антимаг

Гедеон Александр и Евгения
1. Антимаг
Фантастика:
фэнтези
6.95
рейтинг книги
Антимаг

Второгодка. Книга 5. Презренный металл

Ромов Дмитрий
5. Второгодка
Фантастика:
городское фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Второгодка. Книга 5. Презренный металл

Я - злодейка в дораме. Сезон второй

Вострова Екатерина
2. Выжить в дораме
Фантастика:
уся
фэнтези
сянься
попаданцы
5.00
рейтинг книги
Я - злодейка в дораме. Сезон второй

Я – Легенда 2: геном хищника

Гарцевич Евгений Александрович
2. Я - Легенда!
Фантастика:
боевая фантастика
рпг
фантастика: прочее
попаданцы
5.00
рейтинг книги
Я – Легенда 2: геном хищника

Я не царь. Книга XXIV

Дрейк Сириус
24. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я не царь. Книга XXIV

Последний Паладин. Том 5

Саваровский Роман
5. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 5

Изменяющий-Механик. Компиляция. Книги 1-18

Усманов Хайдарали
Собрание сочинений
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Изменяющий-Механик. Компиляция. Книги 1-18

Двойник короля 12

Скабер Артемий
12. Двойник Короля
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Двойник короля 12

На границе империй. Том 10. Часть 13

INDIGO
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 13

Неучтенный элемент. Том 11

NikL
11. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 11