Innledning
ECMAScript 6, også kjent som ECMAScript 2015, er den nyeste versjonen av ECMAScript standard. ES6 er en større oppdatering til språket, og den første oppdateringen til det språket siden ES5 ble standardisert i 2009. Gjennomføringen av disse har i stor JavaScript motorer som er i gang nå.
Se ES6 standard for full spesifikasjon av ECMAScript 6 språk.,
ES6 inneholder følgende nye funksjoner:
- piler
- klasser
- forbedret objekt verdiane
- mal strenger
- destructuring
- standard + resten + spre
- la + const
- iterators + for..,av
- generatorer
- unicode
- moduler
- modulen lastere
- kart + set + weakmap + weakset
- proxyer
- symboler
- subclassable innebygde moduler
- løfter
- matematikk + antall + string + antenne + objektet Api
- binære og oktale verdiane
- reflektere api
- halen anrop
ECMAScript 6 Funksjoner
Piler
Pilene er en funksjon skriftspråk ved å bruke =>
syntaks. De er syntaktisk lignende til beslektet funksjon i C#, Java 8 og CoffeeScript., De støtter både uttalelse blokkere organer så vel som uttrykk organer som returnerer verdien av uttrykket. I motsetning til funksjoner, piler dele samme leksikalske this
som deres omkringliggende kode.
Mer info: MDN Pil Funksjoner
Klasser
ES6 klasser er en enkel sukker over prototype-basert OO mønster. Ha en single praktisk fortellende form gjør klasse mønstre enklere å bruke, og oppfordrer interoperabilitet. Klasser støtte prototype-basert arv, super samtaler, forekomst og statiske metoder og konstruktører.,
Mer info: MDN Klasser
Forbedret Objekt Verdiane
Objekt verdiane er utvidet til å støtte innstillingen prototypen på konstruksjon, en forkortelse for foo: foo
oppgaver, definere metoder, noe som gjør super samtaler, og computing eiendom navn med uttrykk. Til sammen har disse også bringe objektet verdiane og klasse erklæringer tettere sammen, og la objekt-basert design dra nytte av noen av de samme fasilitetene.,
Mer info: MDN Grammatikk og-typer: Objekt verdiane
Mal Strenger
Mal strenger gi syntaktisk sukker for å bygge strenger. Dette er tilsvarende streng interpolering har i Perl, Python og mer. Alternativt, en tag kan være lagt til for å tillate strengen konstruksjon for å tilpasses, unngå injeksjon angrep eller bygge høyere nivå data strukturer fra string innhold.
Mer info: MDN Mal Strenger
Destructuring
Destructuring lar bindende bruker pattern matching, med støtte for matching av matriser og objekter., Destructuring er fail-myk, lik standard objekt oppslag foo
, produsere undefined
verdier når de ikke er funnet.
Mer info: MDN Destructuring oppdraget
Standard + Resten + Spre
Callee-evaluert standard parameterverdier. Slå en matrise i fortløpende argumenter i en funksjon samtale. Binder de etterfølgende parameterne til en matrise. Resten erstatter behovet for arguments
og adresser vanlige tilfeller mer direkte.,
function f(x, y=12) { // y is 12 if not passed (or passed as undefined) return x + y;}f(3) == 15
function f(x, ...y) { // y is an Array return x * y.length;}f(3, "hello", true) == 6
function f(x, y, z) { return x + y + z;}// Pass each elem of array as argumentf(...) == 6
More MDN info: Default parameters, Rest parameters, Spread Operator
Let + Const
Block-scoped binding constructs. let
is the new var
. const
is single-assignment. Static restrictions prevent use before assignment.
function f() { { let x; { // okay, block scoped name const x = "sneaky"; // error, const x = "foo"; } // error, already declared in block let x = "inner"; }}
More MDN info: let statement, const statement
Iterators + For..,Av
Iterator objekter aktiver tilpasset utgave som CLR IEnumerable eller Java Iterable. Generalisere for..in
custom iterator-basert iterasjon med for..of
. Krever ikke at du å realisere en array, slik at lat design mønstre som LINQ.
Iterasjon er basert på disse duck-skrevet grensesnitt (med maskinskrevet kopi type syntaks for exposition bare):
Mer info: MDN for…av
Generatorer
Generatorer forenkle iterator-redigering ved hjelp av function*
og yield
., En funksjon erklært som funksjon* returnerer en Generator eksempel. Generatorer er undertyper av iterators som inkluderer ytterligere next
og throw
. Disse gjør det mulig verdier til å strømme tilbake i generator, så yield
er et uttrykk form som returnerer en verdi (eller kaster).
Merk: det Kan også brukes til å aktivere ‘venter» -lignende asynkron programmering, se også ES7 await
forslaget.,
Den generator grensesnittet er (med maskinskrevet kopi type syntaks for exposition bare):
interface Generator extends Iterator { next(value?: any): IteratorResult; throw(exception: any);}
Mer info: MDN Iterasjon protokoller
Unicode
Non-breaking tillegg til å støtte full Unicode, inkludert nye Unicode-bokstavelig form i strenger og nye RegExp u
modus for å håndtere kode poeng, så vel som nye Api-er for å behandle strenger på 21bit kode poeng nivå. Disse tilleggene støtte for å bygge globale programmer i JavaScript.
Mer info: MDN RegExp.prototype.,unicode
Moduler
Språk-nivå støtte for moduler for komponent definisjon. Codifies mønstre fra populære JavaScript modul lastere (AMD, CommonJS). Runtime atferd som er definert av en vert definert standard loader. Implisitt asynkron modell – ingen-kode kjører til forespurt modulene er tilgjengelige, og behandles.,v>
Noen andre funksjoner inkluderer export default
og export *
:
// lib/mathplusplus.jsexport * from "lib/math";export var e = 2.71828182846;export default function(x) { return Math.log(x);}
// app.jsimport ln, {pi, e} from "lib/mathplusplus";alert("2π = " + ln(e)*pi*2);
Mer MDN info: import uttalelse, eksport uttalelse
– Modul Lastere
Modulen lastere støtte:
- Dynamisk lasting
- State isolasjon
- Globale navnerommet isolasjon
- Utarbeidelse kroker
- Nestede virtualisering
standard module loader kan konfigureres, og nye magasiner, som kan være konstruert for å evaluere og legg inn koden i isolerte eller begrenset sammenhenger.,
Kart + Set + WeakMap + WeakSet
Effektiv data strukturer for vanlige algoritmer. WeakMaps gir lekkasjefri objekt-tasten vil side tabeller.
Mer MDN info: Kart, Angi, WeakMap, WeakSet
Proxyer
Proxy gjør det mulig å lage objekter med hele spekteret av atferd som er tilgjengelig til å være vert for objekter. Kan brukes for avskjæring, objekt virtualisering, logging/profilering, etc.
Det er feller som er tilgjengelig for alle runtime-nivå meta-operasjoner:
Mer info: MDN Proxy
– Symboler
Symboler aktivere access control for objekt-tilstand., Symboler tillate egenskaper til å være skrevet av enten string
(som i ES5) eller symbol
. Symboler er en ny primitive typen. Valgfritt description
parameter som brukes i feilsøking – men er ikke en del av identiteten. Symboler som er unike (som gensym), men ikke privat, siden de er utsatt via refleksjon funksjoner som Object.getOwnPropertySymbols
.
Mer info: MDN Symbol
Subclassable Innebygde moduler
I ES6, innebygde moduler som Array
, Date
og DOM Element
s kan være subclassed.,
Objekt konstruksjon for en funksjon som heter Ctor
bruker nå to faser (både praktisk talt utsendt):
- Ring
Ctor
for å fordele objekt, installere noen spesiell atferd - Påberope constructor på nytt eksempel å initialisere
Det kjent @@create
symbolet er tilgjengelig via Symbol.create
. Innebygde moduler nå avsløre deres @@create
eksplisitt.,
Matematikk + Antall + String + Antenne + Objekt Api
Mange nye biblioteket tillegg, inkludert core Matematikk biblioteker, Array konvertering hjelpere, String hjelpere, og Objekt.tilordne for kopiering.
Mer MDN info: Antall, Matematikk, Array.fra Tabellen.av Tabellen.prototype.copyWithin, Objekt.tilordne
Binære og Oktale Verdiane
To nye numeriske bokstavelig skjemaer er lagt for binære (b
) og oktale (o
).
0b111110111 === 503 // true0o767 === 503 // true
Løfter
Løfter er et bibliotek for asynkron programmering., Løfter er et førsteklasses eksempel på en verdi som kan gjøres tilgjengelig i fremtiden. Lover er brukt i mange eksisterende JavaScript-biblioteker.
Mer info: MDN Løfte
Reflektere API
Full refleksjon API å utsette runtime-nivå meta-operasjoner på objektene. Dette er i praksis den inverse av Proxy-API, og gjør det mulig å ringe tilsvarer samme meta-operasjoner som proxy-feller. Spesielt nyttig for implementering av proxyer.,
// No sample yet
Mer info: MDN Reflektere
Halen Anrop
Anrop i halen-posisjon er garantert å ikke vokse stabelen unboundedly. Gjør rekursive algoritmer trygg i møte med ubegrenset innganger.