Jazyk JavaScript se neustále vyvÃjÃ. PravidelnÄ se pro tento jazyk objevujà nové návrhy, ty jsou analyzovány a jsou-li shledány užiteÄnými, pÅidajà se na seznam na https://tc39.github.io/ecma262/ a pak pokraÄujà do specifikace.
Týmy vyvÃjejÃcà JavaScriptové motory majà své vlastnà nápady ohlednÄ toho, co implementovat jako prvnÃ. Mohou se rozhodnout implementovat návrhy, které jsou teprve naÄrtnuty, a odložit vÄci, které jsou už ve specifikaci, protože jsou ménÄ zajÃmavé nebo prostÄ jen tÄžšà na implementaci.
Je tedy pomÄrnÄ bÄžné, že motor implementuje pouze Äást standardu.
Dobrá stránka, na které uvidÃte aktuálnà stav podpory vlastnostà jazyka, je https://compat-table.github.io/compat-table/es6/ (je to velká tabulka, máme jeÅ¡tÄ hodnÄ co studovat).
Jako programátoÅi rádi použÃváme nejnovÄjšà vlastnosti. ÄÃm vÃce dobrých vÄcÃ, tÃm lépe!
Na druhou stranu, jak pÅimÄt náš modernà kód, aby fungoval na starÅ¡Ãch motorech, které jeÅ¡tÄ nerozumÄjà vlastnostem pÅidaným teprve nedávno?
Jsou dva druhy nástrojů, které to zajistÃ:
- Transpilátory.
- Polyfilly.
V této kapitole je naÅ¡Ãm cÃlem zÃskat náhled na to, jak fungujà a jaké je jejich mÃsto pÅi vývoji webů.
Transpilátory
Transpilátor neboli transpiler je zvláštnà druh softwaru, který pÅekládá zdrojový kód do jiného zdrojového kódu. Umà parsovat (âpÅeÄÃst a pochopitâ) modernà kód a pÅepsat jej pomocà starÅ¡Ãch syntaktických konstrukcà tak, aby kód fungoval i na zastaralých motorech.
NapÅÃklad JavaScript pÅed rokem 2020 nemÄl âoperátor koalescenceâ ??. Jestliže tedy návÅ¡tÄvnÃk použÃvá zastaralý prohlÞeÄ, nemusà porozumÄt kódu výška = výška ?? 100.
Transpilátor analyzuje náš kód a pÅepÃÅ¡e výška ?? 100 na (výška !== undefined && výška !== null) ? výška : 100.
// pÅed spuÅ¡tÄnÃm transpilátoru
výška = výška ?? 100;
// po spuÅ¡tÄnà transpilátoru
výška = (výška !== undefined && výška !== null) ? výška : 100;
Nynà je pÅepsaný kód vhodný i pro staršà JavaScriptové motory.
VývojáŠsi obvykle spustà transpilátor na svém vlastnÃm poÄÃtaÄi a pak zveÅejnà transpilovaný kód na serveru.
Když hovoÅÃme o názvech, jednÃm z nejvýznamnÄjÅ¡Ãch transpilátorů je Babel.
Modernà systémy pro vytváÅenà projektů, napÅÃklad webpack, poskytujà způsoby, jak spouÅ¡tÄt transpilátor automaticky pÅi každé zmÄnÄ kódu, takže je velmi jednoduché jej integrovat do procesu vývoje.
Polyfilly
Mezi nové vlastnosti jazyka mohou patÅit nejenom syntaktické konstrukce a operátory, ale také vestavÄné funkce.
NapÅÃklad Math.trunc(n) je funkce, která âodÅÃzneâ desetinnou Äást ÄÃsla, napÅ. Math.trunc(1.23) vrátà 1.
V nÄkterých (velmi zastaralých) JavaScriptových motorech nenà funkce Math.trunc, takže takový kód selže.
Protože hovoÅÃme o nových funkcÃch a ne o syntaktických zmÄnách, nenà tady potÅeba nic transpilovat. PotÅebujeme jenom deklarovat chybÄjÃcà funkci.
Skript, který vylepÅ¡uje nebo pÅidává nové funkce, se nazývá âpolyfillâ. âVyplnÃâ (anglicky âfill inâ) mezeru a pÅidá chybÄjÃcà implementace.
V tomto konkrétnÃm pÅÃpadÄ je polyfill pro Math.trunc skript, který ji implementuje, napÅÃklad takto:
if (!Math.trunc) { // nenÃ-li taková funkce
// implementuje ji
Math.trunc = function(ÄÃslo) {
// Math.ceil a Math.floor existujà i v nejstarÅ¡Ãch JavaScriptových motorech
// budou vysvÄtleny pozdÄji v tomto tutoriálu
return ÄÃslo < 0 ? Math.ceil(ÄÃslo) : Math.floor(ÄÃslo);
};
}
JavaScript je vysoce dynamický jazyk. Skripty mohou pÅidávat nebo modifikovat libovolné funkce, dokonce i vestavÄné.
ZajÃmavá knihovna polyfillů je core js, která podporuje Å¡irokou Å¡kálu vlastnostà a umožÅuje vám pÅidat jen ty, které potÅebujete.
ShrnutÃ
V této kapitole jsme vás chtÄli motivovat k prostudovánà modernÃch vlastnostà jazyka, vÄetnÄ tÄch âza hranouâ, i když jeÅ¡tÄ nejsou pÅÃliÅ¡ podporovány v motorech JavaScriptu.
Jen nezapomÃnejte použÃvat transpilátor (použÃváte-li modernà syntaxi nebo operátory) a polyfilly (abyste pÅidali funkce, které mohou chybÄt). Ty zajistÃ, že váš kód bude fungovat.
NapÅÃklad pozdÄji, až budete JavaScript dobÅe znát, si můžete nastavit systém pro vytváÅenà kódu založený na webpacku s pluginem babel-loader.
Dobré zdroje, které ukazujà aktuálnà stav podpory různých vlastnostÃ:
- https://kangax.github.io/compat-table/es6/ â pro Äistý JavaScript.
- https://caniuse.com/ â pro funkce vztahujÃcà se k prohlÞeÄi.
P.S. Pokud se týká vlastnostà jazyka, obvykle je nejaktuálnÄjšà Google Chrome. Pokud vám nÄkteré demo v tomto tutoriálu selže, zkuste ho. VÄtÅ¡ina dem v tutoriálu vÅ¡ak funguje na kterémkoli modernÃm prohlÞeÄi.
KomentáÅe
<code>, pro nÄkolik Åádků je obalte znaÄkou<pre>, pro vÃce než 10 Åádků vložte odkaz na pÃskoviÅ¡tÄ (plnkr, jsbin, codepenâ¦)