introduktion
ECMAScript 6, Även känd som ECMAScript 2015, är den senaste versionen av ECMAScript-standarden. ES6 är en betydande uppdatering av språket, och den första uppdateringen av språket sedan ES5 standardiserades 2009. Genomförandet av dessa funktioner i stora JavaScript-motorer pågår nu.
Se ES6 standarden för full specifikation av ECMAScript 6 språk.,
ES6 innehåller följande nya funktioner:
- pilar
- klasser
- förbättrade objekt literals
- mallsträngar
- destructuring
- standard + rest + spread
- let + const
- iterators + för..,
- generatorer
- unicode
- moduler
- modul lastare
- karta + set + weakmap + weakset
- proxies
- symboler
- subclassable built-ins
- löften
- math + number + string + array + object APIs
- binära och oktala Literaler
- reflektera API
- svans samtal
ECMAScript 6 funktioner
pilar
pilar är en funktion stenografi med hjälp av =>
syntax. De är syntaktiskt liknar den relaterade funktionen i C#, Java 8 och CoffeeScript., De stöder både uttalande block organ samt uttryck organ som returnerar värdet av uttrycket. Till skillnad från funktioner delar pilar samma lexikala this
som deras omgivande kod.
Mer info: MDN Pilfunktioner
klasser
ES6 klasser är ett enkelt socker över prototypbaserade OO mönster. Att ha en enda bekväm deklarativ form gör klassmönster lättare att använda och uppmuntrar driftskompatibilitet. Klasser stöder prototypbaserad arv, supersamtal, instans och statiska metoder och konstruktörer.,
Mer info: MDN-klasser
förbättrade Objektliteraler
Objektliteraler utökas för att stödja att ställa in prototypen vid konstruktion, stenografi förfoo: foo
uppdrag, definiera metoder, göra supersamtal och beräkna egendomsnamn med uttryck. Tillsammans för dessa också objektkompetenser och klassdeklarationer närmare varandra, och låt objektbaserad design dra nytta av några av samma bekvämligheter.,
Mer info: MDN grammatik och typer: Objektliteraler
Mallsträngar
Mallsträngar ger syntaktiskt socker för att konstruera strängar. Detta liknar sträng interpolation funktioner i Perl, Python och mer. Eventuellt kan en tagg läggas till så att strängkonstruktionen kan anpassas, undvika injektionsattacker eller konstruera datastrukturer på högre nivå från stränginnehåll.
Mer info: MDN Template Strings
Destructuring
Destructuring tillåter bindning med mönstermatchning, med stöd för matchande arrayer och objekt., Destructuring är fail-soft, liknar standardobjektet lookup foo
, producerar undefined
värden när den inte hittas.
Mer info: MDN Destructuring assignment
standard + Rest + Spread
callee-evaluerade standardparametervärden. Förvandla en array till på varandra följande argument i ett funktionssamtal. Binda efterföljande parametrar till en array. Rest ersätter behovet av arguments
och adresserar vanliga fall mer direkt.,
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 objekt aktivera anpassad iteration som CLR IEnumerable eller Java Iterable. Generalisera for..in
till anpassad iteratorbaserad iteration med for..of
. Behöver inte inse en array, vilket möjliggör lata designmönster som LINQ.
Iteration baseras på dessa duck-typade gränssnitt (med TypeScript typ syntax för exposition endast):
Mer info: MDN för…
generatorer
generatorer förenklar iterator-författande medfunction*
ochyield
., En funktion som deklareras som funktion * returnerar en Generatorinstans. Generatorer är undertyper av iteratorer som inkluderar ytterligare next
och throw
. Dessa aktiverar värden för att strömma tillbaka till generatorn, så yield
är ett uttrycksformulär som returnerar ett värde (eller kastar).
Obs: kan också användas för att aktivera ”väntar” -liknande async programmering, se även ES7await
förslag.,
generatorgränssnittet är (med TypeScript-typsyntax endast för exposition):
interface Generator extends Iterator { next(value?: any): IteratorResult; throw(exception: any);}
Mer info: MDN Iterationsprotokoll
Unicode
icke-bryta tillägg för att stödja fullständig Unicode, inklusive ny Unicode bokstavlig form i strängar och ny RegExp u
läge för att hantera Kodpunkter, samt nya API: er för att bearbeta strängar på 21bit-kodpoängsnivå. Dessa tillägg stöder att bygga globala appar i JavaScript.
Mer info: MDN RegExp.prototypstadiet.,unicode
moduler
stöd på språknivå för moduler för komponentdefinition. Kodifierar mönster från populära JavaScript modul lastare (AMD, CommonJS). Körtidsbeteende definierat av en värddefinierad standardlastare. Implicit async model-ingen kod körs tills begärda moduler är tillgängliga och behandlas.,v>
några ytterligare funktioner inkluderar export default
och 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 uttalande, export uttalande
modul lastare
modul lastare stöd:
- dynamisk lastning
- statlig isolering
- Global namespace isolation
- kompilering krokar
- kapslade virtualisering
standardmodulen lastaren kan konfigureras, och nya lastare kan konstrueras för att utvärdera och ladda kod i isolerade eller begränsade sammanhang.,
Map + Set + WeakMap + WeakSet
effektiva datastrukturer för vanliga algoritmer. WeakMaps ger läckagefria objektnyckel ’ d sidobord.
Mer MDN info: karta, Set, WeakMap, WeakSet
Proxies
Proxies möjliggör skapandet av objekt med hela skalan av beteenden som är tillgängliga för värd objekt. Kan användas för avlyssning, objektvirtualisering, loggning/profilering etc.
det finns fällor tillgängliga för alla metaoperationer på runtime-nivå:
Mer info: MDN Proxy
symboler
symboler aktiverar åtkomstkontroll för objekttillstånd., Symboler tillåter att egenskaper aktiveras av antingen string
(som i ES5) eller symbol
. Symboler är en ny primitiv typ. Valfrittdescription
parameter som används vid felsökning-men ingår inte i identiteten. Symboler är unika (som gensym), men inte privata eftersom de exponeras via reflektionsfunktioner som Object.getOwnPropertySymbols
.
Mer info: MDN-Symbol
Underklassable Built-ins
i ES6, inbyggda somArray
,Date
och DOMElement
s kan underklassas.,
Objektkonstruktion för en funktion som heterCtor
använder nu två faser (båda praktiskt taget skickade):
- Ring
Ctor
för att allokera objektet, installera något speciellt beteende - anropa konstruktören på ny instans för att initiera
den kända@@create
symbolen är tillgänglig viaSymbol.create
. Inbyggda exponerar nu sina@@create
explicit.,
Math + Number + String + Array + Object API: er
många nya bibliotekstillägg, inklusive grundläggande matematiska bibliotek, Array conversion helpers, String helpers och Object.tilldela för kopiering.
Mer MDN info: Antal, Matematik, Array.från Matrisen.av Matrisen.prototypstadiet.copyWithin, objekt.tilldela
binära och oktala Literaler
två nya numeriska bokstavliga former läggs till för binära (b
) och oktala (o
).
0b111110111 === 503 // true0o767 === 503 // true
löften
löften är ett bibliotek för asynkron programmering., Löften är en förstklassig representation av ett värde som kan göras tillgängligt i framtiden. Löften används i många befintliga JavaScript-bibliotek.
Mer info: MDN Promise
reflektera API
fullständig reflektion API utsätta runtime-nivå metaoperationer på objekt. Detta är effektivt inversen av Proxy API, och gör det möjligt att ringa samtal som motsvarar samma meta-operationer som proxy fällor. Särskilt användbart för att genomföra proxies.,
// No sample yet
Mer info: MDN reflekterar
Tail Calls
samtal i tail-position garanteras inte växa stapeln obundet. Gör rekursiva algoritmer säkra inför obundet ingångar.