JavaScript, ES6, ES7, ES10, hvor er vi?
On januar 26, 2022 by adminES6 og ES7 – en påmindelse
Jeg vil ikke fornærme dig og skrive endnu en ES6-introduktion…Men jeg vil faktisk gøre det. Kort fortalt er ES6 (eller ES2015) det parti af funktioner, der har bestået Stage 4 i henhold til 2015-milepælen. Med andre ord, hvis du har en god forståelse af ES6 og en vis viden om ES7, har du ca. 4 år at indhente… Intet pres.
Lad os tage et kig på, hvad der officielt er en del af ES6. I øvrigt er alle disse funktioner officielt understøttet på tværs af browsere. Med andre ord behøver du ikke Babel for at bruge nogen af dem (medmindre du understøtter IE 11, som mangler et par stykker).
I ES6 har vi:
Muligheden for at oprette og arve klasser.
class MyComponent extends React.Components {}
ES6-moduler med import og eksport.
import * from 'React';export default MyComponent;
Generatorer
let fibonacci = {
*() {
let pre = 0, cur = 1
for (;;) {
=
yield cur
}
}
}
Har du bemærket det? Decorators, Object destructuring (som React props: {…props}) og så videre er ikke en del af ES6!
Om ES7 (ES2016) her er hvad vi har. Det er en ganske lille opdatering:
- Eksponeringoperatoren
base ** exponent
- Array indeholder
array.includes(myItem) // true or false
Kilde: http://ecma-international.org/ecma-262/7.0/
Som du sikkert har bemærket, nej, Async/Await er ikke en del af ES7, men ES8!
ES8, ES9, ES10
Alle, der har haft et JavaScript-relateret interview i de seneste 2 år, er blevet spurgt mindst 1671 gange, hvad ES6 er, og hvilken funktion det bringer. Men har nogen lagt mærke til at JS åbenbart ikke pludselig stoppede ved ES6 eller ES7, men alligevel er der ingen der spørger dig om det? Her er din mulighed for at rette op på tingene!
I ES8 (ES2017), her er de tilgængelige funktioner:
Og selvfølgelig Async / Await-funktioner:
Hvis du har fulgt artiklen, burde du nu have forstået det: Med kun små undtagelser, disse funktioner er Stage 4, er du i stand til at bruge dem i browseren uden Babel (når det er sagt, ES8 er ES2017, det er stadig ret nyt, og nogle implementeringer som Edge og Opera’s native engine halter lidt bagefter).

Om vi går videre til ES9. Ligesom ES8 og ES6 er ES9 (eller ES2018) en ret stor opdatering:

Endeligt går vi videre til ES10 (Eller ES2019)!
const array = ;array.sort(...)/*
*/
- Gør JavaScript til en supersætning af JSON (se detaljer her)
Hvad med ES5?
Hvis ES6 er ES2015, og ES7 er ES2016, kan du så gætte, hvad ES5’s årstal er?
…Du tabte! (Medmindre du rent faktisk ved det, men da jeg ikke kan høre dig, går jeg ud fra, at du har tabt). ES5 er ES2009!
Det stopper ikke her, før ES5 var den sidste ES-opdatering i 1999!

Som du kan se, var opdateringerne fra 97 til 99 ret hyppige, så skulle ES5 være den eneste opdatering i 16 år!

Hvordan forklarer vi det? Tja, efter min mening er der to faktorer til dette. Den første er teknisk: JavaScript er elendigt. Helt ærligt, det gør det. Dengang havde vi et par alternativer til JS: Java Applets, ActiveX og endda Flash.
Op til 2011-ish (da Chrome begyndte at blive en kugle) var disse teknologier ikke alene en størrelsesorden hurtigere end JS, men de havde også allerede de fleste af de funktioner, som vi stadig kæmper for at få i JS i dag. (Java har alle sprogfunktioner som class og decorators, understøttelse af multi-threading, OpenGL, Sockets osv…). Da Chrome og Google trådte ind på scenen og i 2013 annoncerede, at Java var ude (og derefter fulgte Flash), var korstoget for at få JS til at indhente konkurrenterne i gang. To år senere stod ES6 for døren.
Den anden faktor er af økonomisk art: 2000 er året, hvor Dot-com-boblen bristede. For de yngste af jer kan I forestille jer, hvad bitcoin har været for et par år siden, internetstartups var det samme i slutningen af 90’erne. Startups tilføjede .com i slutningen af deres navne for at få enorme ventureinvesteringer (ligesom vi har et løfte om mySuperStartup.ai i dag), indtil værdien pludselig faldt i 20’erne. Dette er en meget rudimentær forklaring, og jeg opfordrer dig til at tage et kig på wikipedia-artiklen for at få en bedre forklaring.
Pointen er, at internettet holdt op med at få den trækkraft, det havde brug for, for at JS og web-relaterede teknologier kunne få fokus. Senere, med fremkomsten af Amazon, Facebook og Google, fik internettet en ny grund til at være, og en ny grund til at trives. Det gjorde det logisk, at vi tog JS op igen! Google blev offentliggjort i 2004, Chrome blev udgivet i 2008 og blev den mest populære browser i 2014: et år før ES6 ankom.
Hvad mangler vi? (Afviste forslag)
Object.observe
Dette her er nok den største afvisning af alle. Det tillod oprindeligt JS at observere alle værdier i koden :
var obj = {
foo: 0,
bar: 1
};
Object.observe(obj, function(changes) {
console.log(changes);
});obj.baz = 2;
//
Dette var en fantastisk funktion, og selvfølgelig kan du gøre det fra din kode (eller med en polyfill), men implementering af det i browseren var løftet om en hurtigere reaktiv kode (ex: Angular bruger en masse observing). Det blev trukket tilbage, fordi de ikke kunne komme til en implementering med konstant ydeevne. Flere detaljer her.
Cancelable Promises
Selvforklarende, en funktion, jeg er sikker på, er ikke den eneste, der mangler. Ideen er at give udviklere mulighed for at annullere udførelsen af et løfte til enhver tid.
Brugstilfældene varierer, for eksempel for at have klientside-timeout på async-operation, eller for eksempel hvis du har et faneblad-drevet navigationssystem, og brugeren klikker på et faneblad, før du havde tid til at indlæse indholdet af det aktuelle faneblad.
blöcks
Jeg nævner kun denne, fordi jeg godt kan lide navnet, men også fordi det er en fin funktion, der kan sammenlignes med Go Routines eller C# Tasks.
const blöck = await {|
// This code is Async, but most importantly, executed in another thread
|};
Andre
Der er kommet et par andre interessante forslag, som f.eks. callable constructors. De fleste af disse er enten trukket tilbage, fordi den oprindelige forfatter har gjort det, eller afvist, fordi de er i konflikt eller overlapper med eksisterende/planlagte funktioner.
Skriv et svar