Дэвид Флэнаган - JavaScript. Подробное руководство, 6-е издание
- Название:JavaScript. Подробное руководство, 6-е издание
- Автор:
- Жанр:
- Издательство:Символ-Плюс
- Год:2012
- Город:СПб
- ISBN:978-5-93286-215-5
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Дэвид Флэнаган - JavaScript. Подробное руководство, 6-е издание краткое содержание
Эта книга - одновременно и руководство программиста, и полноценный справочник по базовому языку JavaScript и клиентским прикладным интерфейсам, предоставляемым веб-броузерами.
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] На момент написания этих строк выражения-генераторы не поддерживались в Rhino.
можно заменить квадратные скобки в генераторах массивов круглыми скобками и получить выражения-генераторы. Выражение-генератор похоже на генератор массивов (синтаксис в круглых скобках в точности соответствует синтаксису в квадратных скобках), но его значением является объект генератора, а не массив. Преимущество выражений-генераторов перед генераторами массивов в том, что они используют прием отложенных вычислений - вычисления выполняются по мере необходимости, а не все сразу - и позволяют обрабатывать даже бесконечные последовательности. Недостаток генераторов состоит в том, что они обеспечивают только последовательный доступ к своим элементам. То есть, в отличие от массивов, генераторы не позволяют обращаться к элементам по индексам: чтобы получить n-е значение, придется выполнить n-1 итераций.
Ранее в этой главе мы реализовали функцию 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] На момент написания этих строк данная особенность не поддерживалась в Rhino.
появилась возможность краткой записи простых функций (называется «лексическим замыканием»). Если функция вычисляет единственное выражение и возвращает его значение, ключевое слово return
и фигурные скобки, окружающие тело функции, можно опустить и просто поместить выражение сразу после списка аргументов. Например:
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) {
// Здесь обрабатываются любые другие исключения
}
finally {
// Блок finally действует как обычно
}
Когда возникает какое-либо исключение, по очереди проверяются все блоки catch
. Исключение присваивается именованному параметру блока catch
и вычисляется условное выражение. Если оно возвращает true
, выполняется тело этого блока catch
, а все остальные блоки catch
пропускаются. Если блок catch
не имеет условного выражения, он ведет себя как блок с условным выражением if true
и выполняется всегда, если перед ним не был встречен блок catch
, удовлетворяющий условию. Если условное выражение присутствует во всех блоках catch
и ни в одном из них условное выражение не вернуло true
, исключение продолжит распространение как необработанное. Обратите внимание, что, поскольку условное выражение уже находится в круглых скобках блока catch
, его не требуется еще раз заключать в скобки, как в обычных инструкциях if
.
11.7. Е4Х: ECMAScript for XML
Расширение ECMAScript for XML, более известное как E4X, - это стандартное расширение [25] Расширение Е4Х определяется стандартром ЕСМА-357. Официальную спецификацию можно найти по адресу: http//www.ecma-interational.org/publications/standarts/Ecma-357.htm
JavaScript, определяющее ряд мощных особенностей для обработки XML-документов. Расширение Е4Х поддерживается интерпретаторами Spider-monkey 1.5 и Rhino 1.6. Из-за того что оно не получило широкой поддержки у производителей броузеров, расширение Е4Х, вероятно, лучше относить к серверным технологиям, основанным на интерпретаторах Spidermonkey или Rhino.
Интервал:
Закладка: