Інструкції та оголошення

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

Розширює ланцюжок областей видимості для інструкції.

Відмінності між інструкціями та оголошеннями

В цьому розділі змішані два різновиди конструкцій: інструкції (англ.) й оголошення (англ.). Вони є двома непересічними наборами граматик. Ось оголошення:

Все решта в списку вище – інструкції.

Терміни "інструкція" й "оголошення" в формальному синтаксисі 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
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet Deno Node.js
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
footnote
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
footnote
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
footnote
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
footnote
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
footnote
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
footnote
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
footnote
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
footnote
Available in workers
Chrome Full support 80
Edge Full support 80
Firefox No support Ні
footnote
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 Ні
footnote
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
footnote
Internet Explorer Partial support 11
footnote
Opera Full support 17
Safari Full support 10
WebView Android Full support 49
Chrome Android Full support 49
Firefox for Android Full support 44
footnote
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

Дивіться також