JavaScript, ES6, ES7, ES10 – wo stehen wir?
On Januar 26, 2022 by adminES6 und ES7 – Erinnerung
Ich werde Sie nicht beleidigen und noch eine weitere ES6-Einführung schreiben…Aber eigentlich werde ich es tun. Kurz gesagt, ES6 (oder ES2015) ist der Stapel von Funktionen, die die Stufe 4 des Meilensteins 2015 erreicht haben. Mit anderen Worten: Wenn du ES6 gut verstehst und dich mit ES7 auskennst, hast du etwa 4 Jahre aufzuholen… Kein Druck.
Werfen wir einen Blick darauf, was offiziell zu ES6 gehört. Übrigens, alle diese Funktionen werden offiziell von allen Browsern unterstützt. Mit anderen Worten, Sie brauchen Babel nicht, um sie zu nutzen (es sei denn, Sie unterstützen IE 11, dem einige davon fehlen).
In ES6 haben wir:
Die Möglichkeit, Klassen zu erstellen und zu erben.
class MyComponent extends React.Components {}
ES6-Module mit Import und Export.
import * from 'React';export default MyComponent;
Generatoren
let fibonacci = {
*() {
let pre = 0, cur = 1
for (;;) {
=
yield cur
}
}
}
Haben Sie es bemerkt? Decorators, Object destructuring (wie React props: {…props}) und so weiter sind nicht Teil von ES6!
Zu ES7 (ES2016) gibt es Folgendes. Es ist ein recht kleines Update:
- Der Potenzierungsoperator
base ** exponent
- Array enthält
array.includes(myItem) // true or false
Quelle: http://ecma-international.org/ecma-262/7.0/
Wie Sie wahrscheinlich bemerkt haben, ist Async/Await kein Teil von ES7, sondern von ES8!
ES8, ES9, ES10
Jeder, der in den letzten 2 Jahren ein Interview zum Thema JavaScript hatte, wurde mindestens 1671 Mal gefragt, was ES6 ist und welches Feature es bringt. Aber ist irgendjemandem aufgefallen, dass JS offensichtlich weder bei ES6 noch bei ES7 plötzlich aufhört, und niemand fragt Sie danach? Hier ist deine Gelegenheit, die Dinge richtig zu machen!
In ES8 (ES2017), hier sind die verfügbaren Features:
Und natürlich, Async / Await Funktionen:
Wenn du den Artikel verfolgt hast, solltest du es jetzt verstehen: Bis auf wenige Ausnahmen, diese Funktionen sind Stage 4, kann man sie in Browsern ohne Babel verwenden (abgesehen davon, dass ES8 als ES2017 noch ziemlich neu ist und einige Implementierungen wie Edge und die native Engine von Opera noch etwas hinterherhinken).
Weiter zu ES9. Genau wie ES8 und ES6 ist ES9 (oder ES2018) ein ziemlich großes Update:
Schließlich geht es weiter zu ES10 (oder ES2019)!
const array = ;array.sort(...)/*
*/
- JavaScript zu einer Obermenge von JSON machen (siehe Details hier)
Was ist mit ES5?
Wenn ES6 ES2015 und ES7 ES2016 ist, können Sie erraten, welches Jahr ES5 ist?
…Sie haben verloren! (Es sei denn, du weißt es tatsächlich, aber da ich dich nicht hören kann, gehe ich davon aus, dass du verloren hast). ES5 ist ES2009!
Es hört hier nicht auf, vor ES5 war das letzte ES-Update 1999!
Wie du siehst, gab es von 97 bis 99 ziemlich häufig Updates, dann war ES5 das einzige Update seit 16 Jahren!
Wie erklären wir das? Nun, meiner Meinung nach gibt es dafür zwei Faktoren. Der erste ist technischer Natur: JavaScript ist scheiße. Ehrlich gesagt, ist es das. Damals gab es ein paar Alternativen zu JS: Java Applets, ActiveX und sogar Flash.
Bis etwa 2011 (als Chrome anfing, eine Kugel zu sein) waren diese Technologien nicht nur um eine Größenordnung schneller als JS, sondern sie hatten auch schon die meisten der Funktionen, um die wir heute noch kämpfen, um sie in JS zu bekommen. (Java verfügt über alle Sprachfunktionen wie Klassen und Dekoratoren, Unterstützung von Multithreading, OpenGL, Sockets usw.). Als Chrome und Google auf den Plan traten und 2013 ankündigten, dass Java ausläuft (und dann Flash folgte), begann der Kreuzzug, um JS mit seinen Konkurrenten gleichziehen zu lassen. Zwei Jahre später stand ES6 vor der Tür.
Der zweite Faktor ist wirtschaftlicher Natur: 2000 ist das Jahr, in dem die Dot-Com-Blase platzte. Für die Jüngeren unter Ihnen: Stellen Sie sich vor, was Bitcoin vor ein paar Jahren war, Internet-Startups waren in den späten 90er Jahren das Gleiche. Startups fügten .com am Ende ihres Namens hinzu, um enorme Risikokapitalinvestitionen zu erhalten (so wie wir heute ein Pfand von mySuperStartup.ai haben), bis der Wert plötzlich in den 20er Jahren fiel. Dies ist eine sehr rudimentäre Erklärung, und ich lade Sie ein, einen Blick auf den Wikipedia-Artikel zu werfen, um eine bessere Erklärung zu erhalten.
Der Punkt ist, dass das Internet nicht mehr die Zugkraft hatte, die es brauchte, um JS und webbezogene Technologien in den Mittelpunkt zu stellen. Später, mit dem Aufstieg von Amazon, Facebook und Google, hatte das Web eine neue Daseinsberechtigung und einen neuen Grund zu florieren. Da war es nur logisch, dass wir JS wieder aufgreifen mussten! Google wurde 2004 veröffentlicht, Chrome kam 2008 auf den Markt und wurde 2014 zum beliebtesten Browser: ein Jahr bevor ES6 erschien.
Was fehlt? (Abgelehnte Vorschläge)
Object.observe
Dies ist wahrscheinlich die größte Ablehnung von allen. Ursprünglich erlaubte er JS, beliebige Werte im Code zu beobachten :
var obj = {
foo: 0,
bar: 1
};
Object.observe(obj, function(changes) {
console.log(changes);
});obj.baz = 2;
//
Das war ein großartiges Feature, und natürlich kann man es von seinem Code aus tun (oder mit einem Polyfill), aber die Implementierung im Browser war das Versprechen eines schnelleren reaktiven Codes (z.B.: Angular verwendet eine Menge Observing). Es wurde zurückgezogen, weil sie nicht zu einer Implementierung mit konstanter Leistung kommen konnte. Mehr Details hier.
Cancelable Promises
Selbsterklärend, ein Feature, das sicher nicht das einzige ist, das fehlt. Die Idee ist, Entwicklern die Möglichkeit zu geben, die Ausführung eines Versprechens jederzeit abzubrechen.
Die Anwendungsfälle variieren, z.B. um einen clientseitigen Timeout bei asynchronen Operationen zu haben, oder z.B. wenn man ein Tab-gesteuertes Navigationssystem hat, und der Benutzer auf einen Tab klickt, bevor man Zeit hatte, den Inhalt des aktuellen Tabs zu laden.
blöcks
Ich erwähne das nur, weil mir der Name gefällt, aber auch, weil es ein nettes Feature ist, vergleichbar mit Go Routinen oder C# Tasks.
const blöck = await {|
// This code is Async, but most importantly, executed in another thread
|};
Anderes
Ein paar andere interessante Vorschläge wurden gemacht, wie aufrufbare Konstruktoren. Die meisten davon wurden entweder zurückgezogen, weil der ursprüngliche Autor dies getan hat, oder abgelehnt, weil sie mit bestehenden/geplanten Funktionen in Konflikt stehen oder sich überschneiden.
Schreibe einen Kommentar