Граматика та типи

В цьому розділі розглядаються основи граматики JavaScript, оголошення змінних, типи даних і літерали.

Основи

Більшість свого синтаксису JavaScript запозичає у Java, C та C++, але на нього вплинули також Awk, Perl і Python.

Мова JavaScript чутлива до регістру і використовує набір символів Unicode. Наприклад, слово Früh (що німецькою означає "рано") може використовуватись як ім'я змінної.

let Früh = "foobar"

Проте, змінна früh не одне й те саме, що Früh, тому що мова JavaScript чутлива до регістру.

У JavaScript команди називаються інструкціями і розділяються крапкою з комою (;).

Немає необхідності ставити крапку з комою після інструкції, якщо вона написана на своєму власному рядку. Проте, якщо ви бажаєте мати більш, ніж одну інструкцію в рядку, тоді потрібно їх відділяти крапкою з комою.

ECMAScript також має правила для автоматичної вставки крапки з комою (ASI, Automatic semicolon insertion) в кінці інструкцій. (Щоб отримати більше інформації, перегляньте детальну довідку щодо лексичної граматики JavaScript.)

Однак, вважається найкращою практикою завжди ставити крапку з комою після інструкції, навіть якщо вона не вимагається. Ця практика зменшує шанси отримати помилки у коді.

Текст скрипта у JavaScript сканується зліва направо та конвертується у послідовність вхідних елементів, якими є токени, керівні символи, символи розриву рядка, коментарі, або пробільні символи. (Символи пробілів, табуляції та символи нового рядка вважаються пробільними символами).

Коментарі

Синтаксис коментарів такий самий, як у C++ та багатьох інших мовах програмування:

// однорядковий коментар

/* а це довший,
* багаторядковий коментар
*/

/* Однак, не можна, /* вкладати коментарі */ SyntaxError */

Коментарі поводяться як пробіли та відкидаються під час виконання скрипта.

Заувага: Ви можете також побачити третій тип синтаксису коментарів на початку деяких файлів JavaScript, який виглядає приблизно так: #!/usr/bin/env node.

Цей синтаксис називається шебанг, це спеціальний коментар, який використовується, щоб вказати шлях до певного рушія JavaScript, який має виконати скрипт. Дивіться коментарі шебанг для більш детальної інформації.

Оголошення

Існують три види оголошення змінних у JavaScript.

var
Оголошує змінну та необов'язково ініціалізує її значенням.
let
Оголошує локальну змінну блочної області видимості, необов'язково ініціалізуючи її значенням.
const
Оголошує константу блочної області видимості, доступну тільки для читання.

Змінні

Ви використовуєте змінні, як символічні імена для значень у вашій програмі. Назви змінних, ідентифікатори, відповідають певним правилам.

Ідентифікатори JavaScript повинні починатися з літери, знаку підкреслення (_) або знаку долара ($). Наступні символи можуть також бути цифрами (0-9).

Оскільки мова JavaScript чутлива до регістру, літери включають у себе символи від "A" до "Z" (у верхньому регістрі) та символи від  "a" до "z" (у нижньому регістрі).

Ви можете використовувати більшу частину літер ISO 8859-1 або Юнікоду, такі як å та ü у ідентифікаторах. (Для більш детальної інформації дивіться цю статтю.) Ви також можете використовувати екрановані послідовності Юнікоду в якості символів у ідентифікаторах.

Деякі приклади допустимих назв: Number_hits, temp99, $credit та _name.

Оголошення змінних

Ви можете оголосити змінну двома шляхами:

  • За допомогою ключого слова var. Наприклад,var x = 42. Цей синтаксис може використовуватись для оголошення як локальних, так і глобальних змінних, в залежності від контексту виконання.
  • За допомогою ключового слова const або let.Наприклад, let y = 13. Цей синтаксис може бути використаний для оголошення локальної змінної блочної області видимості. (Дивіться Область видимості змінної нижче).

Ви також можете просто присвоїти змінній значення. Наприклад, x = 42. Ця форма створює неоголошену глобальну змінну. Вона також генерує попередження у JavaScript. Неоголошені глобальні змінні можуть привести до неочікуваної поведінки. Тому не рекомендується використовувати неоголошені глобальні змінні.

Обчислення змінних

Змінна, оголошена за допомогою var або let, без початкового значення, має значення undefined.

Спроба звернення до неоголошеної змінної призведе до викидання винятку ReferenceError:

var a;
console.log('Значення a дорівнює ' + a); // Значення a дорівнює undefined

console.log('Значення b дорівнює ' + b); // Значення b дорівнює undefined
var b;
// Це може спантеличити, доки ви не прочитаєте 'Підняття змінних' нижче

console.log('Значення c дорівнює ' + c); // Uncaught ReferenceError: c is not defined

let x;
console.log('Значення x дорівнює ' + x); // Значення x дорівнює undefined

console.log('Значення y дорівнює ' + y); // Uncaught ReferenceError: y is not defined
let y; 

Можна використати undefined, щоб з'ясувати, чи має змінна значення. У наступному коді змінній input не присвоюється значення, і умова в операторі if набуває значення true.

var input;
if (input === undefined) {
  doThis();
} else {
  doThat();
}

Значення undefined поводить себе як false, коли використовується в булевому контексті. Наприклад, наступний код виконує функцію myFunction, оскільки елемент myArray дорівнює undefined:

var myArray = [];
if (!myArray[0]) myFunction(); 

Значення undefined перетворюється на NaN, коли використовується у числовому контексті.

var a;
a + 2;  // Обчислюється як NaN

Коли ви обчислюєте змінну null, значення null поводить себе як 0 у числовому контексті, та як false - у булевому. Наприклад:

var n = null;
console.log(n * 32); // Виведе 0 у консоль

 Область видимості змінної

Коли ви оголошуєте змінну за межами будь-яких функцій, вона називається глобальною змінною, позаяк доступна для будь-якого іншого коду у поточному документі. Коли ви оголошуєте змінну всередині функції, вона називається локальною змінною, позаяк доступна лише в межах цієї функції.

JavaScript до ECMAScript 2015 не має блочної області видимості. Точніше, змінна, оголошена всередині блоку, є локальною для функції (або глобальної області видимості), в якій розміщено цей блок.

Наприклад, наступний код виведе 5, тому що областю видимості x є глобальний контекст (або контекст функції, якщо код є частиною функції). Область видимості x не обмежується найближчим блоком конструкції if.

if (true) {
  var x = 5;
}
console.log(x);  // x дорівнює 5

Ця поведінка змінюється при використанні ключового слова let, (представленого в ECMAScript 2015).

if (true) {
  let y = 5;
}
console.log(y);  // ReferenceError: y is not defined

Підняття змінних

Ще однією особливістю змінних у JavaScript є те, що ви можете посилатися на змінну, оголошену пізніше, і це не призведе до винятку.

Ця концепція має назву підняття (hoisting). Змінні у JavaScript, в певному сенсі, "піднімаються" на вершину функції або інструкції у коді. Однак, підняті змінні повертають значення undefined. Тому, навіть якщо ви оголосите та ініціалізуєте змінну після використання або посилання на цю змінну, вона все одно поверне undefined.

/**
* Приклад 1
*/
console.log(x === undefined); // true
var x = 3;

/**
* Приклад 2
*/
// поверне значення undefined
var myvar = 'моє значення';

(function() {
  console.log(myvar); // undefined
  var myvar = 'локальна змінна';
})();

Наведені вище приклади будуть тлумачитися так само, як:

/**
* Приклад 1
*/
var x;
console.log(x === undefined); // true
x = 3;

/**
* Приклад 2
*/
var myvar = 'моє значення';

(function() {
  var myvar;
  console.log(myvar); // undefined
  myvar = 'локальна змінна';
})();

Враховуючи підняття, всі оголошення через var всередині функції мають знаходитись якомога ближче до вершини функції. Така практика покращує зрозумілість коду.

В ECMAScript 2015 let та const підіймаються, але не ініціалізуються. Результатом посилання на змінну в блоці до оголошення цієї змінної буде ReferenceError, тому що змінна перебуває у "тимчасовій мертвій зоні" від початку блоку до обробки її оголошення.

console.log(x); // ReferenceError
let x = 3;

Підняття функції

У випадку з функціями, лише оголошення функцій піднімаються, але не функціональні вирази.

/* Оголошення функції */

foo(); // "ква"

function foo() {
  console.log('ква');
}

/* Функціональний вираз */

baz(); // TypeError: baz is not a function

var baz = function() {
  console.log('кря');
};

Глобальні змінні

Глобальні змінні насправді є властивостями глобального об'єкта.

На веб-сторінках глобальним об'єктом є window, тому ви можете присвоювати значення та звертатись до глобальних змінних за допомогою синтаксису window.змінна.

Відповідно, ви можете звертатись до глобальних змінних, оголошених в одному вікні або фреймі, з іншого вікна або фрейму, вказавши при цьому ім'я цього вікна чи фрейму. Наприклад, якщо в документі оголошена змінна під назвою phoneNumber, ви можете звернутися до неї з iframe так: parent.phoneNumber.

Константи

Ви можете створити іменовану константу, призначену лише для читання, за допомогою ключового слова const.

Синтаксис ідентифікатора константи такий самий, як і синтаксис будь-якого ідентифікатора змінної: він повинен починатися з літери, підкреслення або знака долара ($) та може містити букви, цифри або символи підкреслення.

const PI = 3.14;

Константа не може змінювати значення за допомогою присвоювання або повторно оголошуватися протягом виконання скрипта. Вона повинна бути ініціалізована початковим значенням.

Правила області видимості для констант такі ж, як для let-змінних блочної області видимості. Якщо ключове слово const не вказане, ідентифікатор вважається ідентифікатором змінної.

Не можна оголошувати константу з таким самим ім'ям, як функція або змінна в тій самій області видимості. Наприклад:

// ЦЕ СПРИЧИНИТЬ ПОМИЛКУ
function f() {};
const f = 5;

// ЦЕ ТАКОЖ СПРИЧИНИТЬ ПОМИЛКУ
function f() {
  const g = 5;
  var g;

  //інструкції
}

Однак, властивості об'єктів, присвоєних константам, не захищені, тому наступна інструкція виконується без проблем.

const MY_OBJECT = {'key': 'значення'};
MY_OBJECT.key = 'іншезначення';

Вміст будь-якого масиву також не захищений, тому наступна інструкція виконується без проблем.

const MY_ARRAY = ['HTML','CSS'];
MY_ARRAY.push('JAVASCRIPT');
console.log(MY_ARRAY); //виведе ['HTML','CSS','JAVASCRIPT'];

Структури та типи даних

Типи даних

Останній стандарт ECMAScript визначає вісім типів даних:

  • Сім типів даних, які є простими типами:
    1. Booleantrue та false.
    2. null. Спеціальне ключове слово, що позначає нульове значення. (Оскільки мова JavaScript чутлива до регістру, null це не одне й те саме, що NullNULL чи будь-який інший варіант).
    3. undefined. Властивість верхнього рівня, чиє значення не визначене.
    4. Number. Число, ціле або з плаваючою комою. Наприклад: 42 або 3.14159.
    5. BigInt. Ціле число з довільною точністю. Наприклад:  9007199254740992n.
    6. String. Послідовність символів, що представляють текстове значення. Наприклад: "Привіт".
    7. Symbol (новий в ECMAScript 2015). Тип даних, екземпляри якого унікальні та незмінні.
  • та Object

Хоча цих типів даних відносно мало, вони дозволяють виконувати корисні функції у ваших застосунках. Об'єкти та функції - це інші фундаментальні елементи мови. Об'єкти можна розглядати, як іменовані контейнери для значень, а функції - як процедури, які може виконувати скрипт. 

Перетворення типів даних

JavaScript - це мова з динамічною типізацією. Це означає, що при оголошенні змінної не потрібно вказувати, якого вона типу. Це також означає, що типи даних автоматично перетворюються за необхідності під час виконання скрипта. 

Наприклад, ви можете визначити змінну таким чином:

var answer = 42;

А пізніше цій же змінній можна присвоїти значення рядкового типу даних, наприклад:

answer = 'Дякуємо за рибу...';

Оскільки JavaScript динамічно типізована мова, таке присвоєння не спричиняє повідомлення про помилку.

Числа та оператор '+'

У виразах, що включають числові й рядкові значення з оператором +, JavaScript перетворює числові значення на рядки. Наприклад:

x = 'Відповідь - ' + 42 // "Відповідь - 42"
y = 42 + ' - це відповідь' // "42 - це відповідь"

З усіма іншими операторами JavaScript не перетворює числові значення на рядки. Наприклад:

'37' - 7 // 30
'37' + 7 // "377"

Перетворення рядків на числа

У випадку, коли значення, що представляє число, є в пам'яті у вигляді рядка, існують методи для перетворення.

parseInt повертає тільки цілі числа, тому його використання для десяткових чисел обмежене.

Крім того, найкращою практикою для parseInt є завжди включати параметр radix (основа). Параметр radix вказує, яка система числення має використовуватись.

parseInt('101', 2) // 5

Альтернативним методом отримання числа з рядка є використання оператора + (унарний плюс):

'1.1' + '1.1' // '1.11.1'
(+'1.1') + (+'1.1') // 2.2  
// Зауважте: дужки не обов'язкові, вони додаються для ясності

Літерали

Літерали (англ. literal - "буквальний") відображають значення у JavaScript. Це фіксовані значення, не змінні, які ви буквально вказуєте у сценарії. У цьому розділі описані наступні типи літералів:

Масивові літерали

Масивовий літерал - це список з нуля чи більше виразів, які представляють елементи масиву, вкладений у квадратні дужки ([]). Коли ви створюєте масив, використовуючи масивовий літерал, він ініціалізується вказаними значеннями в якості своїх елементів, а його довжина дорівнює кількості вказаних аргументів.

Наступний приклад створює масив coffees (кава) з трьома елементами та довжиною, що дорівнює три:

let coffees = ['Французька', 'Колумбійська', 'Кона'];

Заувага: Літерал масиву - це тип об'єктного ініціалізатора. Дивіться Використання об'єктних ініціалізаторів.

Якщо масив створюється за допомогою літералів у скрипті верхнього рівня, JavaScript інтерпретує масив кожного разу, коли обчислює вираз, що містить літерал масиву. На додачу, літерал, що використовується у функції, створюється кожного разу, коли викликається функція.

Заувага:  Літерали масиву також є об'єктами Array. Більш детальну інформацію щодо об'єктів Array дивіться у статтях Array та Індексовані колекції.

Додаткові коми у масивних літералах

Вам не обов'язково вказувати всі елементи у масивному літералі. Якщо помістити дві коми поспіль, масив заповнить невказані елементи значеннями undefined. Наступний приклад створює масив fish (риба):

let fish = ['Крилатка', , 'Лящ'];

Цей масив має два елементи зі значеннями та один порожній елемент:

  • fish[0] дорівнює "Крилатка",
  • fish[1] дорівнює undefined
  • fish[2] дорівнює "Лящ"

Якщо в кінці списку елементів ви додаєте кінцеву кому, вона ігнорується.

У наступному прикладі довжина масиву дорівнює трьом. Не існує елемента myList[3]. Усі інші коми у списку позначають новий елемент.

Заувага: коми в кінці можуть створювати помилки у старих версіях веб-переглядачів, тому краще їх видаляти.

let myList = ['дім', , 'школа', ];

У наступному прикладі довжина масиву становить чотири, а елементи myList[0] та myList[2] відсутні.

let myList = [ ,'дім', , 'школа'];

У наступному прикладі довжина масиву становить чотири, а елементи myList[1] та myList[3] відсутні. Ігнорується лише остання кома.

let myList = ['дім', , 'школа', , ];

Розуміння поведінки додаткових ком важливе для розуміння JavaScript як мови. 

Однак, при написанні власного коду, варто однозначно оголошувати відсутні елементи як undefined. Це підвищить зрозумілість та надійність вашого коду.

Булеві літерали

Тип Boolean має два значення літералів: true та false.

Будьте обережні: Не плутайте примітивні булеві значення true та false зі значеннями true та false об'єкта Boolean.

Об'єкт Boolean - це обгортка навколо примітивного булевого типу даних. Дивіться Boolean для отримання додаткової інформації.

Числові літерали

Типи Number та BigInt можна виразити у десятковій (основа 10), шістнадцятковій (основа 16), вісімковій (основа 8) та двійковій (основа 2) формі.

  • Десятковий числовий літерал - це послідовність цифр без 0 (нуля) на початку.
  • Початковий 0 (нуль) або 0o (або 0O) у числовому літералі вказує, що він заданий у вісімковій системі числення. Вісімкове число може включати лише цифри 07.
  • Символи 0x (або 0X) на початку вказують на шістнадцяткове представлення числа. Шістнадцяткове число може включати цифри (09) та літери af та AF. (Регістр символу не має значення. Тому: 0xa = 0xA = 10 і 0xf = 0xF = 15.)
  • Символи 0b (або 0B) на початку вказують на двійкове представлення. Двійкові числа можуть включати лише цифри 0 і 1.

Деякі приклади числових літералів:

0, 117, -345, 123456789123456789n             (десятковий, основа 10)
015, 0001, -0o77, 0o777777777777n             (вісімковий, основа 8)
0x1123, 0x00111, -0xF1A7, 0x123456789ABCDEFn  (шістнадцятковий, "hex" чи основа 16)
0b11, 0b0011, -0b11, 0b11101001010101010101n  (двійковий, основа 2)

Для отримання додаткової інформації дивіться Числові літерали в довідці про лексичну граматику.

Літерали з рухомою крапкою

Літерал з рухомою крапкою може мати такі частини:

  • Десяткове ціле число, яке може мати знак ("+" або "-" перед ним),
  • Десяткову крапку ("."),
  • Дробову частину (інше десяткове число),
  • Порядок.

Порядок позначається через "e" або "E", за яким іде ціле число, яке може мати знак ("+" або "-" перед ним). Літерал з рухомою крапкою повинен мати принаймні одну цифру, а також або десяткову крапку, або "e" (чи "E").

Якщо стисло, синтаксис наступний:

[(+|-)][цифри].[цифри][(E|e)[(+|-)]цифри]

Наприклад:

3.1415926
-.123456789
-3.1E+12
.1e-23

Об'єктні літерали

Об'єктні літерали - це список з нуля або більше пар імен властивостей та асоційованих з ними значень об'єкта, взятих у фігурні дужки  ({}).

Не використовуйте об'єктні літерали на початку інструкції! Це призведе до помилки (або не поводитиметься так, як ви очікували), оскільки { буде інтерпретуватися як початок блоку.

Нижче наведений приклад об’єктного літералу. Перший елемент об'єкта car (автомобіль) визначає властивість myCar та присвоює йому новий рядок "Saturn"; другому елементу, властивості getCar, негайно присвоюється результат виклику функції (carTypes("Honda")); третій елемент, властивість special, використовує існуючу змінну (sales).

var sales = 'Toyota';

function carTypes(name) {
  if (name === 'Honda') {
    return name;
  } else {
    return "Вибачте, ми не продаємо автомобілі " + name + ".";
  }
}

var car = { myCar: 'Saturn', getCar: carTypes('Honda'), special: sales };

console.log(car.myCar);   // Saturn
console.log(car.getCar);  // Honda
console.log(car.special); // Toyota 

Крім того, ви можете використовувати числовий або рядковий літерал в якості імені властивості, чи вкладати один об'єкт у інший. У наступному прикладі використовуються ці можливості.

var car = { manyCars: {a: 'Saab', b: 'Jeep'}, 7: 'Mazda' };

console.log(car.manyCars.b); // Jeep
console.log(car[7]); // Mazda

Іменем властивості об'єкта може бути будь-який рядок, в тому числі порожній. Якщо ім'я властивості не є дозволеним ідентифікатором JavaScript або числом, воно має бути записане в лапках.

До імен властивостей, які не є дозволеними ідентифікаторами, не можна звертатись через крапку (.), але можна звертатись та присвоювати значення за допомогою подібної до масиву нотації ("[]").

var unusualPropertyNames = {
  '': 'Порожній рядок',
  '!': 'Бум!'
}
console.log(unusualPropertyNames.'');   // SyntaxError: Unexpected string
console.log(unusualPropertyNames['']);  // Порожній рядок
console.log(unusualPropertyNames.!);    // SyntaxError: Unexpected token !
console.log(unusualPropertyNames['!']); // Бум!

Покращені об'єктні літерали

У ES2015 об'єктні літерали розширюються для підтримки встановлення прототипу при конструюванні, скороченого запису присвоєнь типу foo: foo, визначення методів, здійснення викликів super та обчислення імен властивостей з виразами.

Разом вони також зближують об'єктні літерали та оголошення класів (class) і дозволяють об'єктно-орієнтованому дизайну користуватися деякими з тих самих зручностей.

var obj = {
    // __proto__
    __proto__: theProtoObj,
    // Скорочений запис для ‘handler: handler’
    handler,
    // Методи
    toString() {
     // Виклики super
     return 'd ' + super.toString();
    },
    // Обчислювані (динамічні) імена властивостей
    [ 'prop_' + (() => 42)() ]: 42
};

Літерали регулярних виразів (RegExp)

Літерал регулярного виразу (який докладно визначається пізніше) - це шаблон, записаний між слешами. Нижче наведено приклад літерала регулярного виразу:

var re = /ab+c/;

Рядкові літерали

Рядковий літерал - це нуль або більше символів всередині подвійних (") або одинарних (') лапок. Рядок повинен бути позначений лапками одного типу (тобто, або двома одинарними лапками, або двома подвійними лапками).

Нижче наведено приклади рядкових літералів:

'раз'
"два"
'1234'
'один рядок \n другий рядок'
"Мар'яна має кота"

Ви можете викликати будь-який з методів об'єкта String на рядковому літералі. JavaScript автоматично перетворює рядковий літерал на тимчасовий об'єкт String, викликає метод, а потім прибирає тимчасовий об'єкт String. Ви також можете використовувати властивість String.length з рядковим літералом:

// Надрукує кількість символів у рядку, враховуючи пробіли.
console.log("Мар'яна має кота".length)  // В цьому випадку, 16.

У ES2015 також доступні шаблонні літерали. Шаблонні літерали пишуться у зворотніх лапках  (`) (гравіс) замість одинарних або подвйних лапок.

Шаблонні рядки надають синтаксичний цукор для конструювання рядків. (Це схоже на функції інтерполяції рядків у Perl, Python та інших).

За бажанням може бути додано тег, що дозволить налаштовувати побудову рядка, уникаючи атак типу впровадження або конструюючи структури даних більш високого рівня з вмісту рядка.

// Створення базового рядкового літералу
`У JavaScript '\n' - це символ переводу рядка.`

// Багаторядковий запис
`У JavaScript шаблонні рядки можуть бути записані
у кількох рядках, а текст в одинарних
чи подвійних лапках не може.`

// Інтерполяція рядків
var name = 'Боб', time = 'сьогодні';
`Привіт, ${name}, як ти ${time}?`

// Створення префіксу HTTP-запиту, який інтерпретує заміни та конструювання
POST`http://foo.org/bar?a=${a}&b=${b}
     Content-Type: application/json
     X-Credentials: ${credentials}
     { "foo": ${foo},
       "bar": ${bar}}`(myOnReadyStateChangeHandler);

Вам варто використовувати рядкові літерали, якщо немає потреби використовувати конкретно об'єкт String. Дивіться String для більш детальної інформації про об'єкти String.

Використання спеціальних символів у рядках

Окрім звичайних символів, ви можете також включати до рядків спеціальні символи, як показано в наступному прикладі.

'один рядок \n другий рядок'

Наступна таблиця наводить спеціальні символи, які можна використовувати у рядках JavaScript.

Таблиця: спеціальні символи JavaScript
Символ Значення
\0 Нуль-символ
\b Повернення на крок
\f Зміна сторінки
\n Новий рядок
\r Повернення каретки
\t Горизонтальна табуляція
\v Вертикальна табуляція
\' Апостроф або одинарні лапки
\" Подвійні лапки
\\ Зворотній слеш
\XXX Символ у кодуванні Latin-1, який містить до трьох цифр у вісімковій системі числення XXX між 0 та 377. Наприклад, \251 - це вісімкова послідовність для знаку охорони авторського права.
\xXX Символ у кодуванні Latin-1, вказаний двома цифрами у шістнадцятковій системі числення XX між 00 та FF. Наприклад, \xA9 - це шістнадцяткова послідовність  для знаку охорони авторського права.
\uXXXX Символ Юнікоду, вказаний чотирма цифрами у шістнадцятковій системі числення XXXX. Наприклад, \u00A9 - це Юнікодова послідовність для знаку охорони авторського права. Дивіться екрановані послідовності Юнікоду.
\u{XXXXX} Екранування кодів символів Юнікоду. Наприклад, \u{2F804} - це те саме, що й прості екранування Юнікоду \uD87E\uDC04.

Екранування символів

Для символів, не перелічених у таблиці, зворотній слеш перед символом ігнорується, але таке використання не рекомендоване, і його слід уникати.

Ви можете вставити лапки у рядок, поcтавивши перед ними зворотній слеш. Це називається екрануванням лапок. Наприклад:

var quote = "Він читав \"Кремацію Сема Маꥳ\" Р.Дж. Сервіса.";
console.log(quote);

Результатом цього буде:

Він читав "Кремацію Сема Маꥳ" Р.Дж. Сервіса.

Щоб включити у рядок сам зворотний слеш, ви маєте його екранувати. Наприклад, щоб присвоїти рядкові шлях до файлу c:\temp, використовуйте наступне:

var home = 'c:\\temp';

Ви також можете екранувати розрив рядка, поставивши перед ним зворотній слеш. І зворотній слеш, і розрив рядка видаляються зі значення рядка.

var str = 'цей текст \
розбито \
на кілька \
рядків.'
console.log(str);   // цей текст розбито на кілька рядків.

Хоча у JavaScript немає синтаксису "heredoc", ви можете наблизитися до нього, додавши в кінці кожного рядка екранування розриву рядка та екранування символа нового рядка:

var poem =
'Roses are red,\n\
Violets are blue.\n\
Sugar is sweet,\n\
and so is foo.'

ECMAScript 2015 вводить новий тип літералів, а саме шаблонні літерали. Це додає багато нових функцій, в тому числі багаторядковий запис!

var poem =
`Roses are red,
Violets are blue.
Sugar is sweet,
and so is foo.` 

Більше інформації

Цей розділ фокусується на базовому синтаксисі оголошень та типів. Щоб дізнатися більше про мовні конструкції JavaScript, дивіться також наступні розділи цього посібника:

У наступному розділі ми розглянемо конструкції потоку керування та обробку помилок.