JavaScript, ES6, ES7, ES10 gdzie jesteśmy?
On 26 stycznia, 2022 by adminES6 i ES7 – przypomnienie
Nie zamierzam się obrażać i pisać kolejnego wprowadzenia do ES6…Ale właściwie to zamierzam to zrobić. W skrócie, ES6 (lub ES2015) to partia funkcji, które przeszły Stage 4 zgodnie z kamieniem milowym 2015. Innymi słowy, jeśli masz dobre zrozumienie ES6 i trochę wiedzy o ES7, masz około 4 lat, aby nadrobić zaległości…Bez presji.
Przyjrzyjmy się temu, co jest oficjalnie częścią ES6. Przy okazji, wszystkie te funkcje są oficjalnie obsługiwane we wszystkich przeglądarkach. Innymi słowy, nie potrzebujesz Babela, aby używać którejkolwiek z nich (chyba że obsługujesz IE 11, w którym brakuje kilku z nich).
W ES6 mamy:
Możliwość tworzenia i dziedziczenia klas.
class MyComponent extends React.Components {}
Moduły ES6 z importem i eksportem.
import * from 'React';export default MyComponent;
Generatory
let fibonacci = {
*() {
let pre = 0, cur = 1
for (;;) {
=
yield cur
}
}
}
Zauważyłeś? Dekoratory, Destrukturyzacja obiektów (jak React props: {…props}) i tak dalej nie są częścią ES6!
About ES7 (ES2016) oto co mamy. Jest to dość mała aktualizacja:
- Operator wykładania
base ** exponent
- Array zawiera
array.includes(myItem) // true or false
Źródło: http://ecma-international.org/ecma-262/7.0/
Jak zapewne zauważyłeś, nie, Async/Await nie jest częścią ES7, ale ES8!
ES8, ES9, ES10
Każdy, kto miał rozmowę kwalifikacyjną związaną z JavaScriptem w ciągu ostatnich 2 lat, został zapytany co najmniej 1671 razy, czym jest ES6 i jaką funkcję przynosi. Ale ktoś zauważył jak JS oczywiście nie zatrzymał się nagle na ES6 ani ES7, a jednak nikt nie pyta Cię o to? Oto twoja szansa, aby wszystko było w porządku!
W ES8 (ES2017), oto dostępne funkcje:
I oczywiście funkcje Async / Await:
Jeśli podążałeś za artykułem, do tej pory powinieneś to dostać: Z małymi wyjątkami, te funkcje są Stage 4, jesteś w stanie używać ich w przeglądarce bez Babel (to powiedziawszy, ES8 jest ES2017, wciąż jest całkiem niedawny, a niektóre implementacje, takie jak Edge i natywny silnik Opery, pozostają nieco w tyle).
Przejście do ES9. Podobnie jak ES8 i ES6, ES9 (lub ES2018) jest dość dużą aktualizacją:
Wreszcie, przejście do ES10 (lub ES2019)!
const array = ;array.sort(...)/*
*/
- Uczynić JavaScript supersetem JSON (zobacz szczegóły tutaj)
Co z ES5?
Jeśli ES6 to ES2015, a ES7 to ES2016, czy możesz zgadnąć jaki jest rok ES5?
…Przegrałeś! (Chyba że faktycznie wiesz, ale ponieważ nie mogę cię usłyszeć, zakładam, że przegrałeś). ES5 to ES2009!
Na tym nie koniec, przed ES5 ostatnia aktualizacja ES była w 1999 roku!
Jak widać od 97 do 99 aktualizacje były dość częste, potem ES5 miało być jedyną aktualizacją od 16 lat!
Jak to wytłumaczyć? Cóż, moim zdaniem składają się na to dwa czynniki. Pierwszy z nich jest techniczny: JavaScript jest do bani. Szczerze mówiąc, jest do bani. W tamtych czasach mieliśmy kilka alternatyw dla JS: aplety Java, ActiveX, a nawet Flash.
Do 2011 roku (kiedy Chrome zaczął być kulą u nogi) nie tylko te technologie były o rząd wielkości szybsze niż JS, ale także posiadały już większość funkcji, o które wciąż walczymy, aby dostać się do JS w dzisiejszych czasach. (Java ma wszystkie cechy języka takie jak klasy i dekoratory, wsparcie dla wielowątkowości, OpenGL, Sockets, itd…). Kiedy Chrome i Google weszły na scenę i ogłosiły w 2013 roku, że Java wyszła (a następnie Flash podążył), krucjata, aby JS dogonił swoich konkurentów, była na. Dwa lata później, mieliśmy ES6 u naszych drzwi.
Drugi czynnik jest ekonomiczny: 2000 to rok pęknięcia bańki Dot-com. Dla najmłodszych z Was, wyobraźcie sobie czym był bitcoin kilka lat temu, startupy internetowe były takie same w późnych latach 90-tych. Startupy dodawały .com na końcu swoich nazw, aby uzyskać ogromne inwestycje venture (tak jak teraz mamy zastaw mySuperStartup.ai), aż wartość nagle spadła w latach 20. Jest to bardzo rudymentarne wyjaśnienie i zapraszam do zapoznania się z artykułem na wikipedii, aby uzyskać lepsze.
Chodzi o to, że Internet przestał zyskiwać trakcję, której potrzebował, aby JS i technologie związane z siecią stały się przedmiotem zainteresowania. Później, wraz z powstaniem Amazon, Facebook i Google, sieć miała nowy powód, aby być, i nowy powód, aby się rozwijać. To uczyniło logicznym, że podnosimy JS z powrotem! Google został upubliczniony w 2004 roku, Chrome został wydany w 2008 roku, a stał się najpopularniejszą przeglądarką w 2014 roku: rok przed pojawieniem się ES6.
Czego brakuje? (Odrzucone propozycje)
Object.observe
Ten jest prawdopodobnie największym odrzuceniem ze wszystkich. Początkowo pozwalał JS obserwować dowolne wartości w kodzie :
var obj = {
foo: 0,
bar: 1
};
Object.observe(obj, function(changes) {
console.log(changes);
});obj.baz = 2;
//
To była świetna funkcja, i oczywiście możesz to zrobić ze swojego kodu (lub z polyfill), ale wdrożenie go w przeglądarce było obietnicą szybszego reaktywnego kodu (ex: Angular używa dużo obserwowania). Został wycofany, ponieważ nie mogli dojść do implementacji o stałej wydajności. Więcej szczegółów tutaj.
Cancelable Promises
Self-explanatory, funkcja, jestem pewien, nie jest jedynym brakującym. Chodzi o to, aby umożliwić programistom anulowanie wykonania dowolnej obietnicy w dowolnym momencie.
Przypadki użycia są różne, na przykład, aby mieć timeout po stronie klienta na operacji async, lub na przykład, jeśli masz system nawigacji oparty na zakładkach, a użytkownik kliknie zakładkę, zanim miałeś czas załadować zawartość bieżącej zakładki.
blöcks
Wspominam o tym tylko dlatego, że podoba mi się nazwa, ale także dlatego, że jest to miła cecha porównywalna z Go Routines lub C# Tasks.
const blöck = await {|
// This code is Async, but most importantly, executed in another thread
|};
Others
Zostało zgłoszonych kilka innych interesujących propozycji, takich jak konstruktory wywoływalne. Większość z nich jest albo wycofana, ponieważ oryginalny autor tak zrobił, albo odrzucona, ponieważ kolidują lub pokrywają się z istniejącymi/planowanymi funkcjami.
Dodaj komentarz