Въведение

Сърцевината на езиковите особености на JavaScript, са определени в стандарт наречен ECMA-262. Езикът определен в този стандарт се нарича ECMAScript, на който JavaScript в браузъра и Node.js средите са над множества. Докато в браузъри и Node.js може да добавяте повече възможности чрез допълнителни обекти и методи, то основата на езика остава, както е определена в ECMAScript, поради което по-нататъшното развитие на ECMA-262 е от жизнено важно значение за успеха на JavaScript, като цяло.

През 2007, JavaScript е на кръстопът. Популярността на Ajax създава нова епоха на динамични уеб приложения, докато JavaScript не се е променил от третото издание на ECMA-262 публикувана през 1999г. TC-39, компетентната комисия за задвижване на процеса ECMAScript, започва голям проект за спецификация на ECMAScript 4. ECMAScript 4 е масивен по обхват и въведените промени към езика са, както малки така и големи. Езиковите характеристики включват нов синтаксис, модули, класове, класическо наследяване, private членове обeкти, допълнителни пояснения на типа и т.н.

Обхватът на промените в ECMAScript 4 предизвиква разногласия в TC-39, някои от членовете имат чувството, че четвъртото издание се опитва да постигне твърде много. Една група лидери от Yahoo, Google, и Microsoft излизат с алтернативни предложения за следващата версия на ECMAScript, която първоначално е наречена ECMAScript 3.1. “3.1” имаше за цел да покаже, че това е постепенна промяна на съществуващ стандарт.

ECMAScript 3.1 въвежда много малко промени в синтаксиса , вместо да се фокусира върху свойствата на атрибутите, вградената поддръжка на JSON и добавяне на методи на вече съществуващите обекти. Въпреки, че имаше ранен опит за помирение между ECMAScript 3.1 и ECMAScript 4, той в крайна сметка не успя, тъй като двата лагера имаха проблеми по много различни гледни точки затова как езикът трябва да се развива.

През 2008, Brendan Eich създател на 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 програмисти да продължават напред. Езиковите характеристики, въведени в ECMAScript 6 представляват основата, върху която JavaScript приложенията ще бъдат изградени в обозримо бъдеще. Това е мястото, където идва тази книга. Моята надежда е, че ще прочетете тази книга за да се запознаете ECMAScript 6 характеристиките, така че да бъдете готови да започнете да ги използвате веднага щом имате нужда.

Браузър и Node.js съвместимост

Много JavaScript среди, като уеб браузъри и Node.js, активно работят по изпълнението на ECMAScript 6. Тази книга не се опитва да се справи с липсата на съгласуваност между реализациите, а се фокусира върху това, което спецификацията дефинира, като правилно поведение. Като такава е възможно вашата JavaScript среда да не съответства на поведението описано в тази книга.

За кой е тази книга?

Тази книга е предназначена само, като насока за тези, които вече са запознати с JavaScript и ECMAScript 5. За по-дълбокото разбиране на езика, не е необходимо да използвате тази книга, тя е полезна за разбирането на различията между ECMAScript 5 и 6. По-специално, тази книга е насочена към средно напредналите JavaScript програмисти (за браузъри и Node.js среди), които искат да научат повече за бъдещето на езика.

Тази книга не е за начинаещи, които никога не са писали код на JavaScript. Вие ще трябва да имате добри основни познания за езика, за да се възползвате от нея.

Преглед

Всяка една от тринадесетте глави в тази книга се отнася до различен аспект на ECMAScript 6. Много глави започват с обсъждане на проблеми за чието решаване са направени промени в ECMAScript 6, давайки по-широк контекст на тези промени и всички глави включват примерни кодове, за да ви помогнат да научите новия синтаксис и концепции.

  • Глава 1: Как работят блок обвързванията - говори за let и const и подмяната на var блоковете
  • Глава 2: Strings и Регулярни изрази - обхваща допълнителни функции за манипулиране и инспектиране на strings, както и въвеждането на template strings.
  • Глава 3: Функции - обсъжда различните промени на функциите. Включва стрела функции, параметри под подразбиране, остатъчни параметри и други.
  • Глава 4: Разширена Обектна функционалност - обяснява промените при създаване на обекти, модифициране и използване. Темите включват промени на обектния синтаксис и нови методи за размисъл.
  • Глава 5: Destructuring за по-лесен достъп до данни - въвежда destructuring на обект и array, които позволява разлагането на обекти и arrays използвайки кратък синтаксис.
  • Глава 6: Simbols и simbol свойства- въвежда концепцията за simbols, като нов начин за определяне на свойствата. Simbols са нов примитивен тип, който може да се използва за скриване (но не криене) на обектни свойства и методи.
  • Глава 7: Sets и Maps - детайли за новите видове колекции на Set, WeakSet, Map и WeakMap. Тези видове са разширени върху полезността на array, чрез добавяне на семантика, премахване на дублираните записи и управление на паметта, предназначени специално за JavaScript.
  • Глава 8: Интератори и генератори - обсъжда добавянето на итератори и генератори в езика. Тези характеристики ви позволяват да работите с колекции от данни по по-мощни начини, които не са били възможни в предишните версии на JavaScript.
  • Глава 9: Въвеждане на Класове в JavaScript - въвежда първата официална концепция за класове в JavaScript. Често това е една точка от объркването на тези, които идват от други езици, добавянето на клас синтаксис в JavaScript прави езика по-достъпен за другите и по-кратък за ентусиастите.
  • Глава 10: Подобрени възможности за Array - обяснява в детайли промените в arrays и интересни начини, по които те могат да бъдат използвани в JavaScript.
  • Глава 11: Promises и Асинхронно програмиране - въвежда promises, като нова част от езика. Promisesята бяха масови усилия, които в крайна сметка придобиха популярност благодарение на подкрепата на обширни библиотеки. ECMAScript 6 официализира promises и ги предоставя по подразбиране.
  • Глава 12: Proxies и Reflection API - въвежда формализирано reflection API за JavaScript и новия proxy обект, който позволява да се прихване всяка операция, извършена върху обект. Reflection дава на програмистите безпрецедентен контрол върху обекти и неограничени възможности за определяне на нови модели за взаимодействие.
  • Глава 13: Капсулиране на код с модули - детайли за официалния модул формат на JavaScript. Намерението е тези модули да могат да заменят многобройните дефиниции на модулни формати, които са се появили през годините.
  • Приложение А: По-малки ECMAScript 6 промени - обхваща други промени, приложени в ECMAScript 6, които ще използвате по-рядко или не се вписват в по-широките основни теми, обхванати във всяка глава.
  • Приложение В: Understanding ECMAScript 7 (2016) - описва две допълнения към стандарта, които са приложени за ECMAScript 7 и които не влиаят на JavaScript, както и на ECMAScript 6.

Използвани конвенции

Следните типографски конвенции са използвани в тази книга:

  • Italics въвежда нови термини
  • Constant width показва част от код или име на файл

В допълнение, по-дълъг код на примери се съдържа в постоянни кодови блокове с ширина като:

function doSomething() {
        // empty
} 

                  

В рамките на един блок код, коментарите от дясно на console.log() изявлението, показват продукцията, която ще видите в браузъра или Node.js конзолата, когато кодът е изпълни, например:

console.log("Hi");    // "Hi"
                  

Ако един ред код в блок кода хвърля грешка, това ще бъде посочено отдясно на кода:

doSomething();    // error!