Інструкції та оголошення
JavaScript-застосунки складаються з інструкцій із певним синтаксисом. Єдина інструкція може простягатися на багато рядків. Декілька інструкцій можуть входити в єдиний рядок, за умови, що кожна інструкція відділена крапкою з комою. Інструкція — це не якесь ключове слово, а група таких слів.
Інструкції та оголошення за категоріями
Перелік інструкцій в алфавітному порядку знаходиться в боковій панелі зліва.
Керування плином виконання
return
Вказує значення, яке буде повернено функцією.
break
Перериває поточну інструкцію циклу, перемикання чи мітки, і передає керування програмою до інструкції, що стоїть після перерваної.
continue
Перериває виконання інструкцій поточної ітерації поточного циклу, або циклу з міткою, і продовжує виконання циклу з наступної ітерації.
throw
Викидає виняток, визначений користувачем.
if...else
Виконує інструкцію, якщо наведена умова є істинною. Якщо умова є хибною — виконується інша інструкція.
switch
Обчислює вираз, зіставляючи значення виразу з умовою випадку, і виконує інструкції, пов'язані зі цим випадком.
try...catch
Позначає блок інструкцій, які програма спробує виконати, і задає реакцію на випадок викидання винятку.
Оголошення змінних
var
Оголошує змінну, опційно ініціалізуючи її значенням.
let
Оголошує локальну змінну в області видимості блока, опційно ініціалізуючи її значенням.
const
Оголошує названу константу, яка доступна лише для читання.
Функції та класи
function
Оголошує функцію зі вказаними параметрами.
function*
Генераторні функції уможливлюють простіше написання ітераторів.
async function
Оголошує асинхронну функцію зі вказаними параметрами.
async function*
Асинхронні генераторні функції уможливлюють простіше написання асинхронних ітераторів.
class
Оголошує клас.
Ітерації
do...while
Створює цикл, що виконує вказану інструкцію доти, допоки перевіркова умова не стане хибною. Умова обчислюється після виконання інструкції, таким чином вказану інструкцію буде виконано принаймні один раз.
for
Створює цикл, що складається зі трьох необов'язкових виразів, виділених дужками й розділених крапками з комами, за якими слідує інструкція, яка виконуватиметься в циклі.
for...in
Перебирає перелічувані властивості об'єкта в довільному порядку. Інструкції можуть виконуватися для кожної окремої властивості.
for...of
Перебирає ітеровані об'єкти (в тому числі масиви, масивоподібні об'єкти, ітератори та генератори), викликаючи прилаштовану ітераційну причепу з інструкціями, які буде виконано для значення кожної окремої властивості.
for await...of
Перебирає асинхронні ітеровані об'єкти, масивоподібні об'єкти, ітератори та генератори, викликаючи прилаштовану ітераційну причепу з інструкціями, які буде виконано для значення кожної окремої властивості.
while
Створює цикл, що виконує вказану інструкцію доти, допоки перевіркова умова залишається істинною. Умова обчислюється перед виконанням інструкції.
Інші
- Порожня інструкція
Порожня інструкція використовується, аби не передавати жодної інструкції там, де синтаксис JavaScript очікує інструкцію.
- Блок
Блокова інструкція застосовується для об'єднання нуля чи більше інструкцій. Блок виділяється парою фігурних дужок.
- Інструкція-вираз
Інструкція-вираз обчислює вираз та відкидає його результат. Вона дає виразові змогу проявити побічні ефекти, як то виконання функції чи оновлення змінної.
debugger
Викликає будь-яку наявну функціональність зневадження. Якщо немає жодної доступної функціональності зневадження — ця інструкція не робить нічого.
export
Застосовується для експорту функцій, аби зробити їх доступними для імпорту у зовнішніх модулях та інших скриптах.
import
Застосовується для імпорту функцій, експортованих із зовнішнього модуля, іншого скрипту.
- label
Надає інструкцію з ідентифікатором, до якого можна звернутися використавши інструкції
break
чиcontinue
.with
Розширює ланцюжок областей видимості для інструкції.
Відмінності між інструкціями та оголошеннями
В цьому розділі змішані два різновиди конструкцій: інструкції (англ.) й оголошення (англ.). Вони є двома непересічними наборами граматик. Ось оголошення:
let
const
function
function*
async function
async function*
class
export
(Примітка: може з'являтися лише на зовнішньому рівні модуля)import
(Примітка: може з'являтися лише на зовнішньому рівні модуля)
Все решта в списку вище – інструкції.
Терміни "інструкція" й "оголошення" в формальному синтаксисі JavaScript мають чітко визначене значення, котре впливає на те, де вони можуть зустрічатися в коді. Наприклад, в більшості структур контролю виконання їх тіло приймає лише інструкції, як то дві гілки if...else
:
if (condition) statement1; // інструкція
else statement2; // інструкція
Якщо застосувати оголошення замість інструкції, це призведе до SyntaxError
. Наприклад, оголошення let
не є інструкцією, тож його не можна саме по собі використати як тіло інструкції if
.
if (condition)
let i = 0; // SyntaxError: Lexical declaration cannot appear in a single-statement context
З іншого боку, var
є інструкцією, тож його можна використовувати саме по собі як тіло if
.
if (condition) var i = 0;
Можна зустріти оголошення, що "прив'язують ідентифікатори до значень", й інструкції, що "виконують дії". Факт того, що var
є інструкцією, а не оголошенням, є особливим випадком, тому що воно не відповідає звичним правилам лексичної області видимості й може породжувати побічні ефекти – у вигляді створення глобальних змінних, змін до наявних змінних, оголошених за допомогою var
, і визначення змінних, що видимі поза своїм блоком (через те, що визначені var
змінні не обмежені у своїй області видимості своїм блоком).
Інакший приклад: мітки можуть бути приєднані лише до інструкцій.
label: const a = 1; // SyntaxError: Lexical declaration cannot appear in a single-statement context
[!NOTE] Є історична граматика, котра дозволяє оголошенням функцій мати мітки, але вона була стандартизована лише для відповідності реаліям Вебу.
Щоб це обійти, можна загорнути оголошення в фігурні дужки, тим самим зробивши його частиною інструкції блока.
label: {
const a = 1;
}
if (condition) {
let i = 0;
}
Сумісність із браузерами
desktop | mobile | server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
async function statement
|
Chrome Full support 55 | Edge Full support 15 | Firefox Full support 52 | Internet Explorer No support Ні | Opera Full support 42 | Safari Full support 10.1 | WebView Android Full support 55 | Chrome Android Full support 55 | Firefox for Android Full support 52 | Opera Android Full support 42 | Safari on iOS Full support 10.3 | Samsung Internet Full support 6.0 | Deno Full support 1.0 | Node.js Full support 7.6.0 |
async function* statement
|
Chrome Full support 63 | Edge Full support 79 | Firefox Full support 55 | Internet Explorer No support Ні | Opera Full support 50 | Safari Full support 12 | WebView Android Full support 63 | Chrome Android Full support 63 | Firefox for Android Full support 55 | Opera Android Full support 46 | Safari on iOS Full support 12 | Samsung Internet Full support 8.0 | Deno Full support 1.0 | Node.js Full support 10.0.0 |
block
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 11 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
break
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 3 | Opera Full support 4 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
class
|
Chrome Full support 49 | Edge Full support 13 | Firefox Full support 45 | Internet Explorer No support Ні | Opera Full support 36 | Safari Full support 10.1 | WebView Android Full support 49 | Chrome Android Full support 49 | Firefox for Android Full support 45 | Opera Android Full support 36 | Safari on iOS Full support 10.3 | Samsung Internet Full support 5.0 | Deno Full support 1.0 | Node.js Full support 6.0.0 |
const
|
Chrome Full support 21 | Edge Full support 12 | Firefox Full support 36 | Internet Explorer Full support 11 | Opera Full support 9 | Safari Full support 5.1 | WebView Android Full support 37 | Chrome Android Full support 25 | Firefox for Android Full support 36 | Opera Android Full support 10.1 | Safari on iOS Full support 6 | Samsung Internet Full support 1.5 | Deno Full support 1.0 | Node.js Full support 6.0.0 |
continue
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 3 | Opera Full support 4 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
debugger
|
Chrome Full support 5 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 4 | Opera Full support 10 | Safari Full support 5 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 4.2 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
do...while
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 4 | Opera Full support 4 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
Empty statement (; )
|
Chrome Full support 3 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 3 | Opera Full support 3 | Safari Full support 5 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 4.2 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
export
|
Chrome Full support 61 | Edge Full support 16 | Firefox Full support 60 | Internet Explorer No support Ні | Opera Full support 48 | Safari Full support 10.1 | WebView Android Full support 61 | Chrome Android Full support 61 | Firefox for Android Full support 60 | Opera Android Full support 45 | Safari on iOS Full support 10.3 | Samsung Internet Full support 8.0 | Deno Full support 1.0 | Node.js Full support 13.2.0 |
default keyword with export
|
Chrome Full support 61 | Edge Full support 16 | Firefox Full support 60 | Internet Explorer No support Ні | Opera Full support 48 | Safari Full support 10.1 | WebView Android No support Ні | Chrome Android Full support 61 | Firefox for Android Full support 60 | Opera Android Full support 45 | Safari on iOS Full support 10.3 | Samsung Internet Full support 8.0 | Deno Full support 1.0 | Node.js Full support 13.2.0 |
export * as namespace
|
Chrome Full support 72 | Edge Full support 79 | Firefox Full support 80 | Internet Explorer No support Ні | Opera Full support 60 | Safari Full support 14.1 | WebView Android No support Ні | Chrome Android Full support 72 | Firefox for Android Full support 80 | Opera Android Full support 51 | Safari on iOS Full support 14.5 | Samsung Internet Full support 11.0 | Deno Full support 1.0 | Node.js Full support 12.0.0 |
for
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 3 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
for await...of
|
Chrome Full support 63 | Edge Full support 79 | Firefox Full support 57 | Internet Explorer No support Ні | Opera Full support 50 | Safari Full support 11 | WebView Android Full support 63 | Chrome Android Full support 63 | Firefox for Android Full support 57 | Opera Android Full support 46 | Safari on iOS Full support 11 | Samsung Internet Full support 8.0 | Deno Full support 1.0 | Node.js Full support 10.0.0 |
for...in
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 3 | Opera Full support 2 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
for...of
|
Chrome Full support 38 | Edge Full support 12 | Firefox Full support 13 | Internet Explorer No support Ні | Opera Full support 25 | Safari Full support 7 | WebView Android Full support 38 | Chrome Android Full support 38 | Firefox for Android Full support 14 | Opera Android Full support 25 | Safari on iOS Full support 7 | Samsung Internet Full support 3.0 | Deno Full support 1.0 | Node.js Full support 0.12.0 |
async iterators
|
Chrome Full support 63 | Edge Full support 12 | Firefox Full support 57 | Internet Explorer No support Ні | Opera Full support 50 | Safari Full support 7 | WebView Android Full support 63 | Chrome Android Full support 63 | Firefox for Android Full support 57 | Opera Android Full support 46 | Safari on iOS Full support 7 | Samsung Internet Full support 8.0 | Deno Full support 1.0 | Node.js Full support 10.0.0 |
Closing iterators
|
Chrome Full support 51 | Edge Full support 14 | Firefox Full support 53 | Internet Explorer No support Ні | Opera Full support 38 | Safari Full support 7 | WebView Android Full support 51 | Chrome Android Full support 51 | Firefox for Android Full support 53 | Opera Android Full support 41 | Safari on iOS Full support 7 | Samsung Internet Full support 5.0 | Deno Full support 1.0 | Node.js Full support 6.5.0 |
function statement
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 3 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
Trailing comma in parameters
|
Chrome Full support 58 | Edge Full support 14 | Firefox Full support 52 | Internet Explorer No support Ні | Opera Full support 45 | Safari Full support 10 | WebView Android Full support 58 | Chrome Android Full support 58 | Firefox for Android Full support 52 | Opera Android Full support 43 | Safari on iOS Full support 10 | Samsung Internet Full support 7.0 | Deno Full support 1.0 | Node.js Full support 8.0.0 |
function* statement
|
Chrome Full support 39 | Edge Full support 13 | Firefox Full support 26 | Internet Explorer No support Ні | Opera Full support 26 | Safari Full support 10 | WebView Android Full support 39 | Chrome Android Full support 39 | Firefox for Android Full support 26 | Opera Android Full support 26 | Safari on iOS Full support 10 | Samsung Internet Full support 4.0 | Deno Full support 1.0 | Node.js Full support 4.0.0 |
IteratorResult object instead of throwing
|
Chrome Full support 49 | Edge Full support 13 | Firefox Full support 29 | Internet Explorer No support Ні | Opera Full support 36 | Safari Full support 10 | WebView Android Full support 49 | Chrome Android Full support 49 | Firefox for Android Full support 29 | Opera Android Full support 36 | Safari on iOS Full support 10 | Samsung Internet Full support 5.0 | Deno Full support 1.0 | Node.js Full support 6.0.0 |
Not constructable with new (ES2016)
|
Chrome Full support 50 | Edge Full support 13 | Firefox Full support 43 | Internet Explorer No support Ні | Opera Full support 37 | Safari Full support 10 | WebView Android Full support 50 | Chrome Android Full support 50 | Firefox for Android Full support 43 | Opera Android Full support 37 | Safari on iOS Full support 10 | Samsung Internet Full support 5.0 | Deno Full support 1.0 | Node.js Full support 6.0.0 |
Trailing comma in parameters
|
Chrome Full support 58 | Edge Full support 14 | Firefox Full support 52 | Internet Explorer No support Ні | Opera Full support 45 | Safari Full support 10 | WebView Android Full support 58 | Chrome Android Full support 58 | Firefox for Android Full support 52 | Opera Android Full support 43 | Safari on iOS Full support 10 | Samsung Internet Full support 7.0 | Deno Full support 1.0 | Node.js Full support 8.0.0 |
if...else
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 3 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
import
|
Chrome Full support 61 | Edge Full support 16 | Firefox Full support 60 | Internet Explorer No support Ні | Opera Full support 48 | Safari Full support 10.1 | WebView Android Full support 61 | Chrome Android Full support 61 | Firefox for Android Full support 60 | Opera Android Full support 45 | Safari on iOS Full support 10.3 | Samsung Internet Full support 8.0 | Deno Full support 1.0 | Node.js Full support 13.2.0 |
Dynamic import
|
Chrome Full support 63 | Edge Full support 79 | Firefox Full support 67 | Internet Explorer No support Ні | Opera Full support 50 | Safari Full support 11.1 | WebView Android Full support 63 | Chrome Android Full support 63 | Firefox for Android Full support 67 | Opera Android Full support 46 | Safari on iOS Full support 11.3 | Samsung Internet Full support 8.0 | Deno Full support 1.0 | Node.js Full support 13.2.0 |
Available in workers
|
Chrome Full support 80 | Edge Full support 80 | Firefox No support Ні | Internet Explorer No support Ні | Opera No support Ні | Safari Full support 15 | WebView Android Full support 80 | Chrome Android Full support 80 | Firefox for Android No support Ні | Opera Android No support Ні | Safari on iOS Full support 15 | Samsung Internet Full support 13.0 | Deno Full support 1.0 | Node.js No support Ні |
import.meta
|
Chrome Full support 64 | Edge Full support 79 | Firefox Full support 62 | Internet Explorer No support Ні | Opera Full support 51 | Safari Full support 11.1 | WebView Android Full support 64 | Chrome Android Full support 64 | Firefox for Android Full support 62 | Opera Android Full support 47 | Safari on iOS Full support 12 | Samsung Internet Full support 9.0 | Deno Full support 1.0 | Node.js Full support 10.4.0 |
label
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 4 | Opera Full support 4 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
let
|
Chrome Full support 49 | Edge Full support 14 | Firefox Full support 44 | Internet Explorer Partial support 11 | Opera Full support 17 | Safari Full support 10 | WebView Android Full support 49 | Chrome Android Full support 49 | Firefox for Android Full support 44 | Opera Android Full support 18 | Safari on iOS Full support 10 | Samsung Internet Full support 5.0 | Deno Full support 1.0 | Node.js Full support 6.0.0 |
return
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 3 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
switch
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 4 | Opera Full support 4 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
throw
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 5 | Opera Full support 4 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
try...catch
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 5 | Opera Full support 4 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
Optional catch binding
|
Chrome Full support 66 | Edge Full support 79 | Firefox Full support 58 | Internet Explorer No support Ні | Opera Full support 53 | Safari Full support 11.1 | WebView Android Full support 66 | Chrome Android Full support 66 | Firefox for Android Full support 58 | Opera Android Full support 47 | Safari on iOS Full support 11.3 | Samsung Internet Full support 9.0 | Deno Full support 1.0 | Node.js Full support 10.0.0 |
var
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 3 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
while
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 3 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
with
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 3 | Opera Full support 4 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |