Инструкции и объявления — JavaScript
Приложения на JavaScript состоят из инструкций с соответствующим синтаксисом. Одна инструкция может состоять из нескольких строк. На одной строке может находиться несколько инструкций, если они разделены точкой с запятой. Они являются не ключевыми словами, а группами ключевых слов.
Алфавитный список смотрите в боковой панели слева.
Управление потоком выполнения
- Блок
Блок используется для группировки нуля и более инструкций. Блок отделяется парой фигурных скобок.
break
Прерывает текущую инструкцию цикла, ветвления или инструкцию с меткой и передаёт управление на инструкцию, следующую за прерываемой.
continue
Прерывает выполнение инструкции в текущей итерации текущего цикла или цикла с меткой и продолжает выполнение цикла со следующей итерации.
- Пустая инструкция
Пустая инструкция используется тогда, когда никакой инструкции быть не должно, а по синтаксису JavaScript она требуется.
if...else
Выполняет инструкцию, если указанное условие является истинным. Если условие ложно, выполняет другую инструкцию.
switch
Вычисляет выражение, сопоставляет вычисленное значение с выражением выбора и выполняет инструкции, ассоциированные с этим выбором.
throw
Выбрасывает пользовательское исключение.
try...catch
Помечает блок инструкций и определяет реакцию на возникновение исключения внутри помеченного блока инструкций.
Объявления
var
Объявляет переменную, необязательно инициализирует её значением.
- Экспериментальная возможность
let
Объявляет локальную переменную в области видимости блока, необязательно инициализирует её значением.
- Экспериментальная возможность
const
Объявляет именованную константу только для чтения.
Функции
function
Объявляет функцию с указанными параметрами.
- Экспериментальная возможность
function*
Функции-генераторы, упрощающие написание итераторов.
return
Определяет значение, возвращаемое из функции.
- Экспериментальная возможность
yield
(en-US) Смотрите статьи Что нового в JavaScript 1.7 и Итераторы и генераторы (en-US).
Итерации
do...while
Создаёт цикл, выполняющий указанную инструкцию до тех пор, пока проверяющее условие равно
false
. Условие вычисляется после выполнения инструкции, так что указанная инструкция выполнится хотя бы один раз.for
Создаёт цикл, состоящий из трёх необязательных выражений, заключённых в круглые скобки и разделённым точками с запятой с последующей инструкцией, выполняющейся в цикле.
- Устарело Non-standard
for each...in
Проходит указанной переменной по всем значениям свойств объекта. Выполняет инструкции для каждого уникального свойства.
for...in
В случайном порядке проходит по перечислимым свойствам объекта.
Выполняет инструкции для каждого уникального свойства.- Экспериментальная возможность
for...of
Проходит по итерируемым объектам (включающим в себя массивы, массивоподобные объекты и итераторы с генераторами (en-US)), выполняя пользовательский хук с инструкциями, исполняющимися для значения каждого уникального свойства.
while
Создаёт цикл, выполняющий указанную инструкцию до тех пор, пока проверяющее условие равно
true
. Условие вычисляется перед выполнением инструкции..
Прочее
debugger
Вызывает любую доступную функциональность отладки. Если функциональность отладки не доступна, эта инструкция ничего не делает.
export
Используется для экспорта подписанным скриптом свойств, функций и объектов в другие подписанные или неподписанные скрипты. Эта древняя функциональность Netscape была удалена и будет пересмотрена модулями ECMAScript 6.
import
Используется для импорта скриптом свойств, функций и объектов из подписанного скрипта, который предоставил эту информацию. Эта древняя функциональность Netscape была удалена и будет пересмотрена модулями ECMAScript 6.
label
Предоставляет инструкцию с идентификатором, на который вы можете сослаться с помощью инструкций
break
илиcontinue
.- Устарело
with
Расширяет цепочку областей видимости инструкции.
Specification |
---|
ECMAScript Language Specification # sec-async-function-definitions |
ECMAScript Language Specification # sec-async-generator-function-definitions |
ECMAScript Language Specification # sec-block |
ECMAScript Language Specification # sec-break-statement |
ECMAScript Language Specification # sec-class-definitions |
ECMAScript Language Specification # sec-let-and-const-declarations |
ECMAScript Language Specification # sec-continue-statement |
ECMAScript Language Specification # sec-debugger-statement |
ECMAScript Language Specification |
ECMAScript Language Specification # sec-empty-statement |
ECMAScript Language Specification # sec-exports |
ECMAScript Language Specification # sec-for-statement |
ECMAScript Language Specification # sec-for-in-and-for-of-statements |
ECMAScript Language Specification # sec-function-definitions |
ECMAScript Language Specification # sec-generator-function-definitions |
ECMAScript Language Specification # sec-if-statement |
ECMAScript Language Specification # sec-imports |
ECMAScript Language Specification # sec-labelled-statements |
ECMAScript Language Specification # sec-return-statement |
ECMAScript Language Specification # sec-switch-statement |
ECMAScript Language Specification # sec-throw-statement |
ECMAScript Language Specification # sec-try-statement |
ECMAScript Language Specification # sec-variable-statement |
ECMAScript Language Specification # sec-while-statement |
ECMAScript Language Specification # sec-with-statement |
- Операторы
Found a content problem with this page?
- Edit the page on GitHub.
- Report the content issue.
- View the source on GitHub.
Want to get more involved?
Learn how to contribute.
This page was last modified on by MDN contributors.
Справочник JavaScript. Кратко, быстро, под рукой (А. Никольский)
679 ₽
444 ₽
+ до 101 балла
Бонусная программа
Итоговая сумма бонусов может отличаться от указанной, если к заказу будут применены скидки.
Купить
Цена на сайте может отличаться от цены в магазинах сети. Внешний вид книги может отличаться от изображения на сайте.
В наличии
В наличии в 651 магазине. Смотреть на карте
58
Цена на сайте может отличаться от цены в магазинах сети. Внешний вид книги может отличаться от изображения на сайте.
Создание сайтов
Данный справочник содержит всю ключевую информацию о Javascript в удобной и наглядной форме. Структура справочника позволяет быстро и удобно находить нужную информацию, получать примеры использования тех или иных элементов и конструкций JavaScript.
Отдельное внимание уделено отраслевым рекомендациям по хорошему стилю программирования на JavaScript, объектной модели современных браузеров, отладке программ и обработке ошибок.
Справочник будет полезен всем, кто использует или изучает JavaScript: от начинающих до профессионалов.
Как получить бонусы за отзыв о товаре
1
Сделайте заказ в интернет-магазине
2
Напишите развёрнутый отзыв от 300 символов только на то, что вы купили
3
Дождитесь, пока отзыв опубликуют.
Если он окажется среди первых десяти, вы получите 30 бонусов на Карту Любимого Покупателя. Можно писать неограниченное количество отзывов к разным покупкам – мы начислим бонусы за каждый, опубликованный в первой десятке.
Правила начисления бонусов
Если он окажется среди первых десяти, вы получите 30 бонусов на Карту Любимого Покупателя. Можно писать неограниченное количество отзывов к разным покупкам – мы начислим бонусы за каждый, опубликованный в первой десятке.
Правила начисления бонусов
Классный справочник
Плюсы
Красивый дизайн, материал изложен кратко и по делу, есть примеры
Финальная часть
Плюсы
Красиво смотрятся вместе на полке, чувствуешь даже себя профи в фронт Энде, но. ..
Минусы
Дороговато
Книга «Справочник JavaScript. Кратко, быстро, под рукой» есть в наличии в интернет-магазине «Читай-город» по привлекательной цене. Если вы находитесь в Москве, Санкт-Петербурге, Нижнем Новгороде, Казани, Екатеринбурге, Ростове-на-Дону или любом другом регионе России, вы можете оформить заказ на книгу А. Никольский «Справочник JavaScript. Кратко, быстро, под рукой» и выбрать удобный способ его получения: самовывоз, доставка курьером или отправка почтой. Чтобы покупать книги вам было ещё приятнее, мы регулярно проводим акции и конкурсы.
Справочник по сравнению с ценностью — большинство людей этого не понимают
29 марта 2021 г.
JavaScript
В JavaScript есть чему поучиться, но одна из самых запутанных тем, с которой вы столкнетесь при изучении JavaScript, — это соотношение значения и ссылки. В этой статье я подробно расскажу, что такое значение и ссылка, и как вы можете использовать эти знания, чтобы избежать многих распространенных ошибок, с которыми вы, вероятно, уже сталкивались раньше.
Если вы предпочитаете учиться визуально, посмотрите видеоверсию этой статьи.
Как работают значения и ссылки
Когда вы создаете переменную в JavaScript, вы знаете, что устанавливаете для какой-то переменной определенное значение.
В приведенном выше примере мы устанавливаем для переменной a
значение 10
. Это довольно легко понять, но становится сложнее, когда имеешь дело с несколькими назначениями переменных.
Если мы сопоставим переменные из приведенного выше кода с их значениями, мы получим что-то вроде этого.
Переменная | Значение |
---|---|
а | 10 |
б | 20 |
с | 10 |
Чтобы построить эту диаграмму, мы взяли значение объекта справа от знака равенства и присвоили ему значение переменной слева от знака равенства.
Для переменной a
мы берем значение вещи справа, равное 10
, и устанавливаем его как значение для a
. Затем мы повторяем то же самое для b
и c
. Причина, по которой переменная c
имеет значение 10
, заключается в том, что переменная a
находится справа от знака равенства, что означает, что мы получаем значение a
, которое равно 10
, и устанавливаем его равным значение с
.
Если бы мы немного изменили этот код и добавили 1 к c
( c = c + 1
), то мы получили бы следующую диаграмму.
Переменная | Значение |
---|---|
а | 10 |
б | 20 |
с | 11 |
Как вы можете видеть, изменив c
мы фактически не меняем на
, хотя c
были производными от на
. Это связано с тем, что когда мы устанавливаем значение c
в приведенном выше примере, мы берем c + 1
, что равно 11, и устанавливаем для него значение c
, которое не влияет на a
. Скорее всего, вы знакомы с этим поведением, но когда мы вводим массивы/объекты, все ведет себя немного иначе.
Переменная | Значение |
---|---|
а | 10 |
б | 20 |
с | 0x01 |
Адрес | Значение |
---|---|
0x01 | [1,2] |
Массивы и объекты требуют второй таблицы, которая представляет адрес памяти этого массива/объекта. Этот адрес памяти является просто кодом, который представляет, где на вашем компьютере хранятся данные. Затем значение этой переменной устанавливается равным адресу памяти массива/объекта, связанного с переменной. Это называется ссылкой, поскольку переменная c
ссылается на место в памяти вместо значения.
Теперь давайте посмотрим, что произойдет, когда мы создадим новую переменную на основе c
.
Переменная | Значение |
---|---|
а | 10 |
б | 20 |
с | 0x01 |
д | 0x01 |
Адрес | Значение |
---|---|
0x01 | [1,2] |
Как видите, c
и d
ссылаются на одно и то же место в памяти. Это связано с тем, что для получения значения переменной вы берете элемент справа от знака равенства, получаете его значение и устанавливаете это значение в качестве значения новой переменной. В нашем случае значение c
равно 0x01
, поэтому значение d
также устанавливается равным 0x01
, что означает, что c
и d
указывают на один и тот же адрес памяти.
Если мы изменим на
, то мы одновременно изменим и
, поскольку они связаны с одной и той же памятью.
Переменная | Значение |
---|---|
а | 10 |
б | 20 |
с | 0x01 |
д | 0x01 |
Адрес | Значение |
---|---|
0x01 | [1,2,3] |
Как видите, переместив 3 в конец d
, мы также модифицируем c
, так как они оба имеют дело с одним и тем же массивом в памяти.
Это то, что сбивает с толку многих разработчиков, но есть еще одна область, в которой большинство разработчиков сбиты с толку.
Почему идентичные массивы не равны? Это потому, что всякий раз, когда вы сравниваете переменные в JavaScript, он проверяет, идентичны ли значения переменных.
Чтобы объяснить это дальше, давайте напишем наш код следующим образом.
Переменная | Значение |
---|---|
а | 0x01 |
б | 0x02 |
Адрес | Значение |
---|---|
0x01 | [1,2] |
0x02 | [1,2] |
Несмотря на то, что a
и b
имеют массивы с одинаковыми номерами, они отделены друг от друга, поскольку эти массивы имеют разные места в памяти, где они хранятся. Всякий раз, когда вы создаете новый массив или объект, он будет сохранен по совершенно новому адресу памяти. Вот почему a
и b
указывают на разные адреса памяти.
Когда мы делаем сравнение равенства между a
и b
легко понять, почему это неверно, поскольку они имеют разные значения. a
имеет значение 0x01
, а b
имеет значение 0x02
.
Если мы немного изменим этот код, мы можем сделать проверку на равенство истинной.
Переменная | Значение |
---|---|
а | 0x01 |
б | 0x01 |
Адрес | Значение |
---|---|
0x01 | [1,2] |
Теперь, когда мы установили b
равными a
, мы убедились, что они ссылаются на один и тот же адрес памяти, и теперь они имеют одинаковое значение.
Почему это важно?
Это важно понимать, поскольку, когда вы передаете массив или объект функции, вы передаете эту ссылку, что означает, что вы можете фактически изменить массив/объект из этой функции.
В приведенном выше примере мы передаем a
в функцию addElement
, и поскольку значение a
является адресом памяти, мы фактически можем изменить память по этому адресу, вызвав push
внутри функции. Затем это добавляет элемент в место в памяти, на которое указывает a
, поэтому a
имеет значение 3, добавленное в конец, даже вне функции.
Это то, что вызывает множество ошибок, поскольку многие программисты не знают, как работает это взаимодействие, и случайно изменяют массивы/объекты, не подозревая об этом.
Заключение
Ссылка и значение — это запутанная тема, которая приводит к множеству ошибок, но если вы понимаете, как установка переменной работает на основе значений, все эти ошибки станут проблемой прошлого.
Справочное руководство | Справочное руководство Vanilla JS Toolkit
| Инструментарий Vanilla JSПерейти к основному содержанию Отзыв о доступности
Краткий справочник по часто используемым методам JavaScript и API браузера.
Если не указано иное, они работают во всех современных браузерах на настольных и мобильных устройствах. Вы можете расширить поддержку с помощью полифиллов.
⏰ Последний шанс! В понедельник начинается новая сессия Vanilla JS Academy. Присоединяйтесь сегодня и получите скидку 30% на регистрацию.
- document.querySelectorAll() — Найти все соответствующие элементы на странице.
- document.querySelector() — Найти первый соответствующий элемент на странице.
- Element.matches() — Проверить, будет ли элемент выбран определенным селектором или набором селекторов.
- для — цикл по массивам и массивоподобным объектам.
- for…of — Цикл по итерируемым объектам.
- for…in — Зацикливание на простых объектах.
- Array.forEach() и NodeList.forEach() — Перебор массивов и списков узлов.
- Element.classList — добавление, удаление, переключение и проверка классов элемента.
- Element.className — Получить и установить классы для элемента.
- Element.style — получение и установка встроенных стилей для элемента.
- Window.getComputedStyle() — Получить вычисляемый стиль элемента.
- Element.getAttribute() — Получить атрибут элемента.
- Element.setAttribute() — Установить атрибут элемента.
- Element.removeAttribute() — Удалить атрибут из элемента.
- Element.hasAttribute() — Проверить, есть ли у элемента атрибут.
- Свойства — Получить и установить свойства элемента.
- Element.addEventListener() — Прослушивание событий элемента.
- CustomEvent() — Создание и отправка пользовательских событий.
- String.padStart() — Добавить символы в начало строки, если она меньше определенной длины.
- String.padEnd() — Добавить символы в конец строки, если она меньше определенной длины.
- String.trim() — Удалить начальные и конечные пробелы из строки.
- String.toUpperCase() — Преобразование всего текста в строке в верхний регистр.
- String.toLowerCase() — Преобразование всего текста в строке в нижний регистр.
- String.replace() — Заменить часть строки чем-то другим.
- String.replaceAll() — Заменить все экземпляры строки внутри другой строки.
- String.slice() — Получить часть строки, начинающуюся и заканчивающуюся определенными символами.
- String.split() — Преобразование строки в массив.
- String.indexOf() — Поиск индекса подстроки внутри строки.
- String.includes() — Проверить, содержит ли строка подстроку.
- Шаблонные литералы — более простое создание многострочных или сложных строк.
- parseInt() — Преобразование строки в целое число (целое число).
- parseFloat() — Преобразование строки в число точек (число с десятичными точками).
- Число() — Преобразование строки в число.
- Number.toFixed() — Форматирование числа до фиксированного числа знаков после запятой.
- Number.toString() — Преобразование числа в строку.
- Базовая математика — Выполнение базовых арифметических операций с помощью JavaScript.
- Увеличение и уменьшение — Увеличение числа вверх и вниз.
- Сравнение — Сравнение двух чисел.
- Math.abs() — Получить абсолютное значение числа.
- Math.floor() — Получить наибольшее целое число, меньшее или равное числу.
- Math.ceil() — Получить наименьшее целое число, большее или равное числу.
- Math.max() — Получить наибольшее число из набора чисел
- Math.min() — Получить наименьшее число из набора чисел.
- Math.random() — Возвращает случайное число с плавающей запятой между
0
и1
.
- Array.map() — Преобразование элементов в массив и создание нового.
- Array.filter() — Создать новый массив, содержащий подмножество элементов из существующих.
- Array. reduce() — Получить содержимое массива и вернуть одно значение.
- Array.reverse() — Обратный порядок элементов в массиве.
- Array.sort() — Сортировка и изменение порядка элементов в массиве.
- Array.join() — объединить все элементы массива в строку.
- Array.push() — Добавить элементы в массив.
- Array.concat() — Объединить два или более массивов вместе.
- Array.slice() — Копировать сегмент массива в новый массив.
- Array.splice() — Удаление, замена и добавление элементов в массив по определенным индексам.
- Array.shift() — Удалить первый элемент из массива.
- Array.pop() — Удалить последний элемент из массива.
- Array.from() — Создать новый массив из существующего массива или массивоподобного объекта.
- Array.indexOf() — Получить индекс первого соответствующего элемента в массиве.
- Array.find() — Получить первый элемент массива, удовлетворяющий условию.
- Array.findIndex() — Поиск индекса элемента в многомерном массиве.
- Object.keys() — Получить массив ключей от объекта.
- Object.entries() — Получить массив пар ключ/значение из объекта.
- удалить — Удалить элемент из объекта.
- Object.assign() — выполнить неглубокое слияние двух или более объектов.
- Object.freeze() — Сделать объект или массив неизменяемыми.
- Сокращение свойств объекта — сокращение для определения свойств объекта.
- Объект Функция Сокращение — сокращение для определения функций в объекте.
- Необязательная цепочка — свойства цепочки, только если они не являются
неопределенными
илинулевыми
.
- Разрушение массива — Извлечение переменных из свойств массива.
- Деструктуризация объекта — Назначение переменных из свойств объекта.
- Расширенный синтаксис — Расширьте свойства массива или объекта до их собственных значений.
- StructuredClone() — Расширить свойства массива или объекта до их собственных значений.
- Тернарный оператор — Более короткий способ написать операторы
if...else
. - Параметры по умолчанию — определение значений по умолчанию для параметров функций.
- Остальные параметры — Создайте массив с несколькими аргументами функции.
- Функции со стрелками — Альтернативный способ определения функций.
HTML и текст
- Element.innerHTML — получение и установка содержимого HTML для элемента.
- Element.outerHTML — получение и установка содержимого HTML , включая элемент.
- Node.textContent — Получить и установить текст элемента (без разметки).
- Element.innerText — Получить и установить отображаемый текст элемента.
- document.createElement() — Создать элемент.
- Node.before() — Вставить элемент в DOM перед другим.
- Node.after() — Вставить элемент в DOM после другого.
- Element.append() — Вставить элемент в конец набора элементов внутри общего родителя.
- Element.prepend() — Вставить элемент в начало набора элементов внутри общего родителя.
- Node.remove() — Удалить элемент из DOM.
- Node.replaceWith() — Заменить элемент другим.
- Node.clone() — Создать копию узла.
- Element.parentNode — Получить родителя элемента.
- Element.closest() — Получить ближайший родительский элемент, соответствующий селектору.
- Node.children — получение непосредственных потомков элемента.
- Node.childNodes — Получить непосредственных потомков элемента, включая текстовые фрагменты и другие узлы, не являющиеся элементами.
- Node.firstChild и Node.lastChild — получить первый и последний дочерние узлы родительского элемента.
- Node.firstElementChild и Node.lastElementChild — получение первого и последнего дочерних элементов родительского элемента.
- Node.nextSibling & Node.previousSibling — Получить следующий и предыдущий одноуровневый узел элемента.
- Node.nextElementSibling & Node.previousElementSibling — получение следующего и предыдущего родственных элементов элемента.
- window.innerHeight — Получить высоту области просмотра.
- window.innerWidth — Получить ширину окна просмотра.
- Element.getBoundingClientRect() — Получить информацию о размере элемента и его положении относительно окна просмотра.
- Файлы cookie — получение и установка значений файлов cookie.
- localStorage — хранить данные локально в браузере для последующего использования.
- sessionStorage — хранить данные локально на время текущего сеанса браузера.
- JSON.parse() — преобразовать строковый JSON обратно в объект или массив.
- JSON.stringify() — преобразование данных объекта или массива в строку.
- fetch() — Сделать HTTP-запрос на основе Promise.
- Promise.all() — Дождитесь разрешения двух или более асинхронных задач.