Вступ
Особливості ядра мови JavaScript визначені у стандарті під назвою ECMA-262. Мова, яку визначає цей стандарт, називається ECMAScript. Те, що відомо всьому світові як JavaScript, фактично є надбудовою ECMAScript. У той час, як браузери та Node.js розширюють можливості за допомогою додаткових об’єктів та методів, ядро мови залишається таким, яким воно визначене у ECMAScript, тому розвиток ECMA-262 є життєво важливим для успіху JavaScript загалом.
У 2007 році JavaScript опинився на роздоріжжі. Популярність AJAX породила нову епоху динамічних веб–додатків у той час, як JavaScript не змінювався з часів своєї третьої редакції ECMA-262, опублікованої у 1999 році. TC-39, комітет відповідальний за розвиток ECMAScript, зібрав великий проект специфікації ECMAScript 4. ECMAScript 4 був всеохоплюючим та вносив у мову як маленькі, так і великі зміни. Нововведення включали новий синтаксис, модулі, класи, класичне наслідування, приватні методи, можливість оголошувати власні типи та інше.
Зміни, що охоплювали ECMAScript 4, викликали розкол у TC-39: деякі учасники вважали, що четверта редакція надто радикальна. Група лідерів з Yahoo, Google, та Microsoft запропонували альтернативу наступній версії ECMAScript, яку спочатку назвали ECMAScript 3.1. Версія «3.1» мала демонструвати поступові зміни в існуючому стандарті.
ECMAScript 3.1 вводив кілька синтаксичних змін, але не фокусувався на властивостях атрибутів, вбудованій підтримці JSON, додаванні методів до вже існуючих об’єктів. Хоча спочатку були спроби узгодити ECMAScript 3.1 та ECMAScript 4, зрештою це не вдалось, оскільки обидва табори мали вкрай різні погляди на те, в якому напрямку повинна розвиватись мова.
У 2008, Брендан Айк, творець JavaScript, анонсував, що TC-39 зосередить свої зусилля на стандартизації ECMAScript 3.1. Вони вирішили, що представлять головні синтаксичні та функціональні зміни ECMAScript 4 тільки після того, як нову версію ECMAScript буде стандартизовано, і всі члени комітету будуть працювати для того, щоб зібрати найкраще з ECMAScript 3.1 та 4 разом — ці зусилля були названі ECMAScript Harmony.
Зрештою, ECMAScript 3.1 був стандартизований п’ятою версією ECMA-262, також відомою як ECMAScript 5. Комітет ухвалив рішення не випускати стандарт ECMAScript 4, щоб уникнути плутанини з іншим стандартом, який мав таке саме ім’я, проте припинив своє існування. Потім розпочалась робота над ECMAScript Harmony, а ECMAScript 6 став першим стандартом, випущеним у цьому новому «гармонійному» руслі.
ECMAScript 6 досягнув функціонально завершеного статусу у 2015 році та був офіційно названим «ECMAScript 2015» (хоча цей текст досі називає його ECMAScript 6, оскільки така назва більш звична для розробників). Нововведення варіюються від повністю нових об’єктів та патернів до синтаксичних змін нових методів вже існуючих об’єктів. Найцікавіша річ у ECMAScript 6 — це те, що всі ці зміни спрямовані на проблеми, з якими безпосередньо зустрічаються розробники. Хоча потрібен час на те, щоб ECMAScript 6 був адаптований та реалізований хоча б на мінімальному рівні, якого очікують розробники, проте ми вже можемо багато чого навчитись, дізнавшись як виглядає майбутнє JavaScript.
Сумісність з браузерами та Node.js
Багато середовищ JavaScript, як от веб–браузери та Node.js, активно працюють над імплементацією ECMAScript 6. Ця книга не має на меті порівнювати різні реалізації, натомість вона сфокусована на тому, що специфікація визначає правильною поведінкою. Таким чином цілком можливо, що поведінка вашого оточення JavaScript може не відповідати тій поведінці, яка описана у цій книзі.
Для кого ця книга
Ця книга є посібником для тих, хто вже знайомий з JavaScript та ECMAScript 5. Глибокі знання мови не є необхідними для читання, проте стануть у нагоді для розуміння відмінностей між ECMAScript 5 та 6. Зокрема, ця книга націлена на розробників середнього та високого рівня (незалежно від браузерного чи Node.js-оточення), які хочуть дізнатись про майбутнє цієї мови.
Ця книга не для початківців, які ніколи не писали на JavaScript. Вам потрібне хороше, ґрунтовне розуміння мови, щоб користуватись цією книгою.
Огляд
Глава 1: Блочне зв’язування розповідає про let
та const
— замінники var
з блочною областю видимості.
Глава 2: Рядки та регулярні вирази охоплює розширенні можливості маніпуляцій рядками та вступ до шаблонних рядків.
Глава 3: Функції розглядає різноманітні зміни у функціях. Включає arrow-функції, параметри за замовчуванням, залишкові параметри та інше.
Глава 4: Розширення функціональності об’єктів пояснює відмінності у створенні, модифікації та зміні об’єктів. Тема включає зміни у синтаксисі об’єктних літералів та нові методи відображення.
Глава 5: Деструктурування для легшого доступу до даних вводить в деструктурування об’єкти та масиви, що дає нам можливість розкладати їх, використовуючи короткий синтаксис.
Глава 6: Символи та їх властивості вводить нас в концепцію символів — нового способу задання властивостей. Символи — новий примітивний тип, який можна використовувати для оголошення неявних (але не прихованих) властивостей та методів об’єкта.
Глава 7: Множини та мапи розповідає про тонкощі роботи з новими типами колекцій: Set
, WeakSet
, Map
, та WeakMap
. Ці типи розширюють можливості масивів, додаючи семантику, дедублікацію та керування пам’яттю, розроблену спеціально для JavaScript.
Глава 8: Ітератори та генератори пояснює, яким чином працювати з ітераторами та генераторами, що дають нам можливість оперувати колекціями данних способом, який був недоступний у попередніх версіях JavaScript.
Глава 9: Знайомство з класами у JavaScript уводить у початкову концепцію класів у JavaScript. Це часто викликало плутанину у тих, хто переходив з інших мов програмування. Уведення синтаксису класів у JavaScript робить мову більш доступною для новачків та виразнішою для ентузіастів.
Глава 10: Покращені можливості масивів розповідає про зміни, які стосуються масивів, та нові шляхи їх застосування у JavaScript.
Глава 11: Проміси та асинхронне програмування розглядає нову частину мови — проміси. Проміси були створені звичайними розробниками та набули популярності завдяки зручності та розширеній підтримці іншими бібліотеками. ECMAScript 6 формалізує проміси та робить їх доступними за замовчуванням.
Глава 12: Проксі та АРІ рефлексії вводить формалізоване відображення API для JavaScript та новий об’єкт - проксі, який дозволяє нам перехоплювати кожну операцію, яка виконана над об’єктом. Проксі дають розробникам безпрецедентний контроль над об’єктами, наприклад необмежені можливості для визначення нових патернів взаємодії.
Глава 13: Інкапсуляція коду через модулі описує офіційний формат модулів для JavaScript. Модулі покликані стати єдиною заміною численним способам визначення модулів, що виникли останніми роками.
Додаток A: Дрібніші зміни у ECMAScript 6 розповідає про зміни у ECMAScript 6, які ви використовуватимете не так часто, або які не зовсім вписуються в більш широкі теми, що описуються у кожній з глав.
Додаток Б: Розуміння ECMAScript 7 (2016) описує дві зміни у стандарт, що імплементуються у ECMAScript 7, і які не впливають на JavaScript так сильно, як ECMAScript 6.
Умовні позначення
У цій книзі використані такі умовні позначення:
- Курсивом позначаються нові терміни;
Моноширинним шрифтом
позначені шматочки коду або назви файлів.
Крім того, великі приклади з кодом містяться у моноширинних блоках коду, наприклад:
function doSomething() {
// порожньо
}
У блоках коду коментарі праворуч від інструкції console.log()
демонструють вивід, який ви побачите у браузері або консолі Node.js, коли запустите код. Наприклад:
console.log("Hi"); // "Hi"
Якщо рядок коду у блоці коду кидає помилку, це також позначається коментарем праворуч від коду:
doSomething(); // помилка!
Допомога та підтримка
Ви можете написати про помилку, порадити зміни та відкрити пул–реквест до цієї книги, завітавши сюди:
- https://github.com/LambdaBooks/understandinges6ua (Переклад)
- https://github.com/nzakas/understandinges6 (Оригінал)
Стосовно будь-чого іншого, будь ласка, надсилайте повідомлення сюди: http://groups.google.com/group/zakasbooks.
Подяки
Дякую Jennifer Griffith-Delgado, Alison Law та всім у No Starch Press за їхню підтримку та допомогу з цією книгою. Їхнє розуміння та терпіння тоді, коли моя продуктивність сповзла до мінімуму під час моєї тривалої хвороби - це те, про що я ніколи не забуду.
Я вдячний пильному оку Juriy Zaytsev в якості технічного редактора та Dr. Axel Rauschmayer за його відгуки та кілька розмов, які допомогли прояснити ряд концепцій описаних у цій книзі.
Дякую всім, хто надіслав виправлення у версію книги, яка розміщена на GitHub: ShMcK, Ronen Elster, Rick Waldron, blacktail, Paul Salaets, Lonniebiz, Igor Skuhar, jakub-g, David Chang, Kevin Sweeney, Kyle Simpson, Peter Bakondy, Philip Borisov, Shaun Hickson, Steven Foote, kavun, Dan Kielp, Darren Huskie, Jakub Narębski, Jamund Ferguson, Josh Lubaway, Marián Rusnák, Nikolas Poniros, Robin Pokorný, Roman Lo, Yang Su, alexyans, robertd, 404, Aaron Dandy, AbdulFattah Popoola, Adam Richeimer, Ahmad Ali, Aleksandar Djindjic, Arjunkumar, Ben Regenspan, Carlo Costantini, Dmitri Suvorov, Kyle Pollock, Mallory, Erik Sundahl, Ethan Brown, Eugene Zubarev, Francesco Pongiluppi, Jake Champion, Jeremy Caney, Joe Eames, Juriy Zaytsev, Kale Worsley, Kevin Lozandier, Lewis Ellis, Mohsen Azimi, Navaneeth Kesavan, Nick Bottomley, Niels Dequeker, Pahlevi Fikri Auliya, Prayag Verma, Raj Anand, Ross Gerbasi, Roy Ling, Sarbbottam Bandyopadhyay, та Shidhin.
Також дякую всім, хто підтримав цю книгу на Patreon: Casey Visco.