Introducere
ECMAScript 6, de asemenea, cunoscut sub numele de ECMAScript 2015, este cea mai recentă versiune de Argumente standard. ES6 este o actualizare semnificativă a limbii, și prima actualizare a limbii, deoarece ES5 a fost standardizat în 2009. Punerea în aplicare a acestor caracteristici în motoarele majore JavaScript este în curs de desfășurare acum.
consultați standardul ES6 pentru specificarea completă a limbii ECMAScript 6.,
ES6 include următoarele caracteristici noi:
- săgețile
- cursuri
- îmbunătățită obiect literali
- șablon siruri de caractere
- destructurare
- default + restul + răspândit
- să + const
- iteratori + pentru..,de
- generatoare
- unicode
- module
- modulul de incarcatoare
- harta + set + weakmap + weakset
- proxy-uri
- simboluri
- subclassable construit-in-uri
- promite
- matematica + număr + string + serie + obiect Api-uri
- binar și octal literali
- reflecta api
- coada apeluri
ECMAScript 6 Caracteristici
Săgețile
Săgețile sunt o funcție prescurtare folosind =>
sintaxa. Ele sunt similare sintactic cu caracteristica aferentă în C#, Java 8 și CoffeeScript., Ele susțin atât corpurile blocului de declarații, cât și corpurile de Expresie care returnează valoarea expresiei. Spre deosebire de funcții, săgețile împărtășesc același lexical this
ca codul lor înconjurător.
Mai multe informații: funcțiile săgeată MDN
clase
clasele ES6 sunt un zahăr simplu peste modelul oo bazat pe prototip. Având o singură formă declarativă convenabil face modele de clasă mai ușor de utilizat, și încurajează interoperabilitatea. Clasele acceptă moștenirea bazată pe prototip, super apeluri, instanțe și metode statice și constructori.,
Mai multe informatii: MDN Clase
Îmbunătățită Obiect Literali
Obiect literale sunt extinse pentru a sprijini stabilirea prototip la construcție, prescurtare pentru foo: foo
misiuni, definirea metodelor, face super apeluri, și de calcul de proprietate nume cu expresii. Împreună, acestea aduc, de asemenea, literale obiect și declarații de clasă mai aproape împreună, și să design bazat pe obiect beneficiază de unele dintre aceleași facilități.,
Mai multe informații: MDN gramatică și tipuri: literali obiect
șirurile de șabloane
șirurile de șabloane oferă zahăr sintactic pentru construirea șirurilor. Acest lucru este similar cu caracteristici de interpolare șir în Perl, Python și mai mult. Opțional, se poate adăuga o etichetă pentru a permite personalizarea construcției șirului, evitând atacurile de injecție sau construind structuri de date de nivel superior din conținutul șirului.
Mai multe informații: șirurile de șabloane MDN
destructurarea
destructurarea permite legarea folosind potrivirea modelelor, cu suport pentru potrivirea matricelor și obiectelor., Destructurare este fail-soft, similar cu standard de căutare obiect foo
, produc undefined
valori atunci când nu a fost găsit.
Mai multe informații: MDN Destructuring assignment
implicit + Rest + Spread
valorile parametrilor implicite evaluate de Callee. Transformați o matrice în argumente consecutive într-un apel de funcții. Legați parametrii de urmărire la o matrice. Rest înlocuiește nevoia pentru arguments
și abordează cazurile comune mai direct.,
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..,De obiecte Iterator
permite iterație personalizate cum ar fi CLR IEnumerable sau Java Iterable. Generaliza for..in
personalizat iterator pe bază de iterație cu for..of
. Nu necesită realizarea unei matrice, permițând modele de design leneș, cum ar fi LINQ.
iterația se bazează pe aceste interfețe tip duck (folosind sintaxa de tip TypeScript doar pentru expunere):
Mai multe informații: MDN pentru…de
Generatoare
Generatoare simplifica iterator-creație folosind function*
și yield
., O funcție declarată ca funcție * returnează o instanță Generator. Generatoarele sunt subtipuri de iteratori care includ suplimentare next
și throw
. Acestea permit valorilor să curgă înapoi în generator, deci yield
este o formă de Expresie care returnează o valoare (sau aruncă).
notă: poate fi folosit și pentru a activa programarea asincronă de tip ‘wait’, vezi și ES7 await
propunere.,
generatorul de interfață este (folosind mașina de Scris tip de sintaxă pentru expoziția numai):
interface Generator extends Iterator { next(value?: any): IteratorResult; throw(exception: any);}
Mai multe informatii: MDN Repetare protocoale
Unicode
Non-rupere completări la suport complet pentru Unicode, inclusiv noi Unicode formă literală în siruri de caractere și new RegExp u
modul să se ocupe de puncte de cod, precum și de noi Api-uri pentru procesul de siruri de caractere de la 21bit cod nivel de puncte. Aceste adăugiri sprijină construirea de aplicații globale în JavaScript.mai multe informații: MDN RegExp.prototip.,unicode
module
suport la nivel de limbă pentru module pentru definirea componentelor. Codifică modele de populare Încărcătoare Modul JavaScript (AMD, CommonJS). Comportamentul Runtime definit de un încărcător implicit definit de gazdă. Implicit async model-nici un cod execută până când modulele solicitate sunt disponibile și prelucrate.,v>
Unele caracteristici suplimentare includ export default
și 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);
Mai multe MDN info: import declarație, declarația de export
Modulul Incarcatoare
Modulul incarcator suport:
- încărcare Dinamică
- Starea de izolare
- nume Global de izolare
- Elaborarea cârlige
- virtualizare Imbricate
implicit module loader poate fi configurat, și noi încărcătoare pot fi construite pentru a evalua și de a încărca codul în izolate sau constrâns contexte.,
harta + Set + WeakMap + WeakSet
structuri de date eficiente pentru algoritmi comune. WeakMaps oferă mese laterale obiect-key ‘ D fără scurgeri.
Mai multe MDN info: Harta, Set, WeakMap, WeakSet
Proxy-uri
Proxy-uri permit crearea de obiecte cu întreaga gamă de comportamente disponibile pentru a găzdui obiecte. Poate fi folosit pentru interceptare, virtualizare obiect, logare/profilare, etc.
există capcane disponibile pentru toate meta-operațiunile la nivel de execuție:
Mai multe informații: MDN Proxy
simboluri
simboluri activează controlul accesului pentru starea obiectului., Simbolurile permit ca proprietățile să fie tastate fie cu string
(ca în ES5), fie cu symbol
. Simbolurile sunt un nou tip primitiv. Opțional description
parametru utilizat în depanare – dar nu face parte din identitate. Simbolurile sunt unice (cum ar fi gensym), dar nu private, deoarece sunt expuse prin caracteristici de reflecție precum Object.getOwnPropertySymbols
.
Mai multe informatii: MDN Simbol
Subclassable Construit-in-uri
În ES6, construit-in-uri ca Array
, Date
și DOM Element
– uri pot fi subclasat.,
Obiect de construcție pentru o funcție numită Ctor
foloseste acum două faze (ambele practic expediate):
- Apel
Ctor
să aloce obiect, instalarea speciale de comportament - Invoca constructorul pe noi exemplu pentru a inițializa
cunoscut @@create
simbol este disponibil prin intermediul Symbol.create
. Built-in-uri expune acum lor @@create
în mod explicit.,
Math + Number + String + Array + Object API-uri
multe adăugiri noi de bibliotecă, inclusiv biblioteci de matematică de bază, ajutoare de conversie matrice, ajutoare șir, și obiect.alocați pentru copiere.
Mai multe informații MDN: număr, matematică, matrice.din, matrice.de, matrice.prototip.copyWithin, obiect.atribui
Binar și Octal Literali
Două noi numeric, literal forme sunt adăugate pentru binare (b
) și octal (o
).
0b111110111 === 503 // true0o767 === 503 // true
promisiuni
promisiunile sunt o bibliotecă pentru programarea asincronă., Promisiunile sunt o reprezentare de primă clasă a unei valori care poate fi pusă la dispoziție în viitor. Promisiunile sunt folosite în multe biblioteci JavaScript existente.mai multe informații: MDN Promise
Reflect API
full reflection API expunând meta-operațiunile la nivel de execuție pe obiecte. Acest lucru este în mod eficient inversul API Proxy, și permite efectuarea de apeluri corespunzătoare aceleași meta-operațiuni ca capcanele proxy. Este deosebit de util pentru implementarea proxy-urilor.,
// No sample yet
Mai multe informatii: MDN Reflecta
Coada Apeluri
Apeluri din coada de poziție sunt garantate să nu crească stack unboundedly. Face algoritmi recursive în condiții de siguranță în fața intrări nelimitate.