JavaScript, ES6, ES7, ES10 hol tartunk?
On január 26, 2022 by adminES6 és ES7 – emlékeztető
Nem akarlak megsérteni, és írni egy újabb ES6 bevezetőt…De tulajdonképpen mégis megteszem. Dióhéjban az ES6 (vagy ES2015) a 2015-ös mérföldkő szerint a 4. fázison túljutott funkciók halmaza. Más szóval, ha jól érted az ES6-ot és van némi tudásod az ES7-ről, akkor körülbelül 4 évet kell behoznod… Nincs nyomás.
Vessünk egy pillantást arra, mi az, ami hivatalosan az ES6 része. Egyébként ezek a funkciók mindegyike hivatalosan támogatott a böngészőkben. Más szóval, nincs szükséged Babelre ahhoz, hogy bármelyiket használd (kivéve, ha támogatod az IE 11-et, amelyből néhány hiányzik).
Az ES6-ban van:
Az osztályok létrehozásának és öröklésének lehetősége.
class MyComponent extends React.Components {}
ES6 modulok importtal és exporttal.
import * from 'React';export default MyComponent;
Generátorok
let fibonacci = {
*() {
let pre = 0, cur = 1
for (;;) {
=
yield cur
}
}
}
Észrevetted? A dekorátorok, objektum destructuring (mint a React props: {…props}) és így tovább nem részei az ES6-nak!
Az ES7-ről (ES2016) a következőket tudjuk. Ez egy elég kis frissítés:
- Az exponenciálási operátor
base ** exponent
- Array tartalmazza
array.includes(myItem) // true or false
Forrás: http://ecma-international.org/ecma-262/7.0/
Amint valószínűleg észrevetted, nem, az Async/Await nem az ES7, hanem az ES8 része!
ES8, ES9, ES10
Mindenkit, akinek az elmúlt 2 évben volt egy JavaScripthez kapcsolódó interjúja, legalább 1671 alkalommal megkérdezték, hogy mi az ES6, és milyen funkciót hoz. De észrevette valaki, hogy a JS nyilván nem állt meg hirtelen sem az ES6-nál, sem az ES7-nél, mégsem kérdezi senki? Itt a lehetőség, hogy helyrehozd a dolgokat!
Az ES8-ban (ES2017) itt vannak az elérhető funkciók:
És persze az Async / Await függvények:
Ha követted a cikket, mostanra már érted: Kevés kivételtől eltekintve, ezek a funkciók a 4. fázisban vannak, Babel nélkül is használhatod őket a böngészőben (ennek ellenére az ES8, mivel ES2017, még mindig elég friss, és néhány implementáció, mint az Edge és az Opera natív motorja kicsit le van maradva).

Lépjünk tovább az ES9-re. Az ES8-hoz és ES6-hoz hasonlóan az ES9 (vagy ES2018) is egy elég komoly frissítés:

Végre, tovább az ES10 (vagy ES2019) felé!
const array = ;array.sort(...)/*
*/
- Tegyük a JavaScriptet a JSON szuperhalmazává (a részleteket lásd itt)
Mi lesz az ES5-tel?
Ha az ES6 az ES2015, és az ES7 az ES2016, kitalálod, mi az ES5 éve?
…Vesztettél! (Hacsak nem tudod valójában, de mivel igazából nem hallak, feltételezem, hogy vesztettél). Az ES5 az ES2009!
Ez itt nem áll meg, az ES5 előtt az utolsó ES frissítés 1999-ben volt!

Amint látod, 97-től 99-ig elég gyakoriak voltak a frissítések, aztán az ES5 lesz az egyetlen frissítés 16 év alatt!

Hogyan magyarázzuk ezt? Nos, véleményem szerint ennek két tényezője van. Az első technikai jellegű: A JavaScript szar. Őszintén szólva tényleg. Annak idején volt néhány alternatívája a JS-nek: Java Appletek, ActiveX, sőt még Flash is.
2011 tájékáig (amikor a Chrome elkezdett golyó lenni) nem csak, hogy ezek a technológiák nagyságrendekkel gyorsabbak voltak a JS-nél, de már rendelkeztek a legtöbb olyan funkcióval is, amiért manapság még mindig küzdünk a JS-ben. (A Java rendelkezik az összes nyelvi jellemzővel, mint a class és dekorátorok, multi-threading támogatás, OpenGL, Sockets, stb…). Amikor a Chrome és a Google belépett a színre, és 2013-ban bejelentette, hogy a Java kifutott (majd a Flash is követte), megkezdődött a keresztes hadjárat, hogy a JS felzárkózzon a versenytársakhoz. Két évvel később már az ES6 állt az ajtónk előtt.
A második tényező gazdasági: 2000 a Dot-com buborék kipukkadásának éve. A legfiatalabbak képzeljék el, mi volt a bitcoin néhány évvel ezelőtt, az internetes startupok ugyanilyenek voltak a 90-es évek végén. A startupok .com-ot tettek a nevük végére, hogy óriási kockázati befektetéseket kapjanak (mint ahogy manapság a mySuperStartup.ai záloga van), amíg az érték hirtelen le nem esett a 20-as években. Ez egy nagyon kezdetleges magyarázat, és megkérlek, hogy nézd meg a wikipedia cikket egy jobb magyarázatért.
A lényeg az, hogy az internet már nem nyerte el azt a vonzerőt, amire szüksége volt ahhoz, hogy a JS és a webhez kapcsolódó technológiák a fókuszba kerüljenek. Később, az Amazon, a Facebook és a Google felemelkedésével a webnek új oka volt a létezésre, és új oka volt a virágzásra. Ez logikussá tette, hogy a JS-t újra elővegyük! A Google 2004-ben került nyilvánosságra, a Chrome 2008-ban jelent meg, és 2014-ben lett a legnépszerűbb böngésző: egy évvel az ES6 megjelenése előtt.
Mi hiányzik? (Elutasított javaslatok)
Object.observe
Ez talán a legnagyobb elutasítás mind közül. Eredetileg lehetővé tette, hogy a JS bármilyen értéket megfigyeljen a kódban :
var obj = {
foo: 0,
bar: 1
};
Object.observe(obj, function(changes) {
console.log(changes);
});obj.baz = 2;
//
Ez egy nagyszerű funkció volt, és nyilván a saját kódodból (vagy egy polyfillel) is megteheted, de a böngészőben való megvalósítása a gyorsabb reaktív kód ígérete volt (pl.: Angular sok megfigyelést használ). Visszavonták, mert nem tudtak állandó teljesítményű implementációra jutni. További részletek itt.
Cancelable Promises
Self-explanatory, egy funkció, biztos vagyok benne, hogy nem az egyetlen hiányzó. Az ötlet lényege, hogy a fejlesztők bármikor lemondhassák bármelyik ígéret végrehajtását.
A felhasználási esetek változóak, például kliensoldali időkorlátozás aszinkron műveletnél, vagy például, ha van egy lapvezérelt navigációs rendszerünk, és a felhasználó rákattint egy lapra, mielőtt még ideje lett volna betölteni az aktuális lap tartalmát.
blöcks
Ezt csak azért említem meg, mert tetszik a neve, de azért is, mert a Go Routines-hoz vagy a C# Tasks-hez hasonló szép funkció.
const blöck = await {|
// This code is Async, but most importantly, executed in another thread
|};
Más
Egy pár más érdekes javaslat is született, mint például a hívható konstruktorok. Ezek többségét vagy visszavonták, mert az eredeti szerző ezt tette, vagy elutasították, mert ütköznek vagy átfedésben vannak a meglévő/tervezett funkciókkal.
Vélemény, hozzászólás?