Давайте коротко повторимо вивчений матеріал і пригадаємо ключові моменти.
Структура коду
Інструкції розділяються крапкою з комою:
alert('Привіт'); alert('Світ');
Зазвичай, перенесення рядка також вважається за розділювач, тому такий варіант теж працюватиме:
alert('Привіт')
alert('Світ')
Це називається “автоматичне вставлення крапки з комою”. Іноді такий варіант може не спрацювати, наприклад:
alert("Після цього повідомлення буде помилка")
[1, 2].forEach(alert)
Більшість посібників по стилю коду рекомендують ставити крапку з комою після кожної інструкції.
Крапку з комою не потрібно ставити після блоків коду {...}
та синтаксичних конструкцій з ними, наприклад, після циклів:
function f() {
// після оголошення функції не обов’язково ставити крапку з комою
}
for(;;) {
// після циклу також немає потреби ставити крапку з комою
}
…Але навіть якщо ми поставимо “зайву” крапку з комою, помилки не буде. Її просто буде проігноровано.
Детальніше: Структура коду.
Суворий режим (strict mode)
Щоб залучити усі можливості сучасної мови JavaScript, нам потрібно починати скрипти із конструкції "use strict"
.
'use strict';
...// ваш код
Цю директиву потрібно розміщувати в першому рядку скрипту або на початку тіла функції.
Без "use strict"
, код все ще буде працювати, однак деякі можливості працюватимуть в старому режимі, так званому “режимі сумісності”. Ми рекомендуємо використовувати суворий (“сучасний”) режим.
Деякі сучасні функції мови (наприклад, класи, які ми будемо вивчати в майбутньому) неявно вмикають суворий режим.
Детальніше: Сучасний режим, "use strict".
Змінні
Можна оголошувати наступним чином:
let
const
(константа, не можна змінювати)var
(старий спосіб, ми переглянемо його пізніше)
Ім’я змінної може включати:
- Літери та цифри; першим символом має бути лише літера, не цифра.
- Допускаються символи
$
та_
, в парі з літерами. - Не латинські символи, як кирилиця та ієрогліфи також допускаються, але вони не мають широкого вжитку.
Змінні динамічно типізовані, тобто вони змінюють свій тип в залежності від присвоєного значення. Можуть зберігати будь-які значення:
let x = 5; // присвоєно тип "число"
x = "Іван"; // тип змінився на "рядок"
Існує 8 типів даних:
- число (
number
) для цілих та десяткових чисел, bigint
для цілих чисел довільної довжини,- рядок (
string
) для тексту/слів, - булевий тип (
boolean
) для логічних значень:true/false
, null
— тип з єдиним значеннямnull
, який означає “пусто” або “не існує”,undefined
— тип з єдиним значеннямundefined
, який означає “не присвоєно”,- об’єкт (
object
) та символ (symbol
) — для складних структур даних та унікальних ідентифікаторів, ми їх ще не вивчили.
Оператор typeof
повертає тип змінної, за винятком двох випадків:
typeof null == "object" // помилка в мові
typeof function(){} == "function" // спеціально для функцій
Детальніше: Змінні та Типи даних.
Взаємодія
Ми використовуємо браузер у ролі робочого середовища, тому для взаємодії з відвідувачами ми використовуємо функції:
prompt(question, [default])
- Ставить питання
question
, а потім повертає те, що ввів відвідувач, абоnull
, якщо відвідувач натиснув кнопку “Скасувати”. confirm(question)
- Ставить питання
question
і пропонує відвідувачу вибрати ОК або Скасувати. Вибір повертається якtrue/false
. alert(message)
- Виводить повідомлення
message
.
Всі ці функції показують модальне вікно; вони зупиняють виконання скрипту і не дають користувачеві взаємодіяти зі сторінкою доки не буде надана відповідь.
Наприклад:
let userName = prompt("Ваше ім’я?", "Настя");
let isBunWanted = confirm("Хочете булочку?");
alert( "Відвідувач: " + userName ); // Настя
alert( "Хоче булочку: " + isBunWanted ); // true
Детальніше: Взаємодія: alert, prompt, confirm.
Оператори
JavaScript підтримує такі оператори:
- Арифметичні
-
Звичайні:
* + - /
, а також оператори%
, для визначення остачі від ділення та**
для піднесення до степеня.Бінарний плюс
+
об’єднує (конкатинує) рядки. А якщо одним з операндів буде рядок, то інший операнд також буде конвертовано в рядок:alert( '1' + 2 ); // '12', рядок alert( typeof ( 1 + '2' ) ); // string
- Оператори присвоєння
-
Звичайне присвоєння:
a = b
і складеніa *= 2
. - Оператори бітового зсуву
-
Бітові оператори працюють з 32-бітними цілими числами на найнижчому, побітовому, рівні. Детальніше про їхнє використання можна прочитати в документації, коли це знадобиться.
- Умовний оператор
-
Єдиний оператор з трьома параметрами:
cond ? resultA : resultB
. Якщоcond
вірно, повертаєтьсяresultA
, інакше –resultB
. - Логічні оператори
-
Логічні І
&&
та АБО||
використовують так звані “ледачі обчислення” і насамкінець повертають значення, на якому воно зупинилося (не обов’язковоtrue
абоfalse
). Логічне НЕ!
конвертує операнд в логічний тип і повертає інвертоване значення. - Оператор об’єднання з null
-
Оператор
??
дає можливість вибору визначеного значення зі списку змінних. Результатомa ?? b
будеa
якщо його значення відмінне відnull/undefined
, інакшеb
. - Порівнювання
-
Перевірка на рівність
==
для значень різних типів, конвертує їх в число (за виняткомnull
іundefined
, які рівні тільки один одному і нічому іншому), тому приклади нижче рівні:alert( 0 == false ); // true alert( 0 == '' ); // true
Інші оператори порівнювання також конвертують значення в числовий тип.
Оператор строгої рівності
===
не виконує конвертацію: різні типи для нього завжди означають різні значення.Значення
null
таundefined
особливі: вони рівні==
лише самим собі та не рівні нічому іншому.Оператори порівнювання більше/менше порівнюють рядки посимвольно, інші типи конвертуються в число.
- Інші оператори
-
Існують й інші оператори, такі як кома.
Детальніше: Базові оператори, математика, Оператори порівняння, Логічні оператори, Оператор об’єднання з null '??'.
Цикли
-
Ми вивчили 3 типи циклів:
// 1 while (condition) { ... } // 2 do { ... } while (condition); // 3 for(let i = 0; i < 10; i++) { ... }
-
Змінна, оголошена в циклі
for(let...)
, видима лише в циклі. Але ми також можемо опуститиlet
та використовувати повторно чинну змінну. -
Директиви
break/continue
дозволяють вийти з циклу/поточної ітерації. Використовуйте мітки для виходу із вкладених циклів.
Детальніше: Цикли: while і for.
Пізніше ми вивчимо більше видів циклів, які працюють з об’єктами.
Конструкція “switch”
Конструкція “switch” може замінити декілька перевірок if
. Для порівняння, ця конструкція використовує оператор строгого порівняння ===
.
Наприклад:
let age = prompt('Скільки вам років?', 18);
switch (age) {
case 18:
alert("Не запрацює"); // результатом prompt є рядок, а не число
break;
case "18":
alert("А так запрацює!");
break;
default:
alert("Будь-яке значення, нерівне значенням вище");
}
Детальніше: Конструкція "switch".
Функції
Ми розглянули три способи створення функції в JavaScript:
-
Function Declaration: функція в основному потоці коду
function sum(a, b) { let result = a + b; return result; }
-
Function Expression: функція як частина виразу
let sum = function(a, b) { let result = a + b; return result; };
-
Стрілкові функції:
// вираз праворуч let sum = (a, b) => a + b; // багаторядковий код в фігурних дужках { ... }, тут потрібен return: let sum = (a, b) => { // ... return a + b; } // без аргументів let sayHi = () => alert("Привіт"); // з одним аргументом let double = n => n * 2;
- У функцій можуть бути локальні змінні: тобто ті, які оголошені в тілі функції, або передані як параметри. Такі змінні видимі лише всередині функції.
- Параметри можуть мати усталені значення:
function sum(a = 1, b = 2) {...}
. - Функції завжди щось повертають. Якщо всередині функції немає оператора
return
, тоді вона повернеundefined
.
Детальніше: дивіться Функції, Стрілкові функції, основи.
Ми вивчимо більше
Це був короткий перелік можливостей JavaScript. Цієї миті ми вивчили лише основи. Далі в посібнику ви знайдете більше особливостей і просунутих можливостей JavaScript.
Коментарі
<code>
, для кількох рядків – обгорніть їх тегом<pre>
, для понад 10 рядків – використовуйте пісочницю (plnkr, jsbin, codepen…)