javascript - ECMAScript 6-funktioner tillgängliga i Node.js 0.12
En ny stabil version av Node.js (0.12) har nyligen släppts med en uppgraderad Googles V8 JavaScript-motor, v3.28.73.
Vilka ECMAScript 6-funktioner finns för närvarande i Node.js, utan att använda --harmony-flaggan?
Jag har kollat flera sajter som påstår sig lista ES 6-funktionerna, men alla verkar vara inaktuella - mest framträdande är denna tabell (Uppdatering: nu uppdaterad med aktuellt Node.js-status från 0.12), eftersom flera av funktionerna listas som att de kräver --harmony-flaggan medan jag fann att några av dem redan är aktiverade som standard (Maps, Sets, Symbols, för att nämna några). Uppdatering: Nodespecifika tabeller har sedan dess gjorts tillgängliga
Dessutom ger försök att googla denna information enbart för V8-motorn för mycket uppdaterad information - nuvarande V8-release är 4.2.*, vilket är ganska långt före det som Node.js använder.
Min förhoppning är att denna fråga (och dess svar) kommer att bli en omfattande sammanfattning av vilka ES 6-funktioner som nu är tillgängliga för Node.js-utvecklare.
ES 6-funktioner som är aktiverade i Node.js 0.12 som jag för närvarande känner till:
- Kartor, Set/Svaga kartor, Svaga set
- Symboler
- Object.observe
- Löften
Nummer
- .ärHeltal
- .ärSäkerHeltal
- .isNaN
- .EPSILON
- .MIN_SAFE_INTEGER
- .MAX_SAFE_INTEGER
Matematik
- .clz32
Svar #1
Funktioner utan --harmony-flaggan:
- "for-of"-loop
- Karta, Set, WeakMap, WeakSet (redan specificerat i frågan)
- Symbol (redan specificerad i frågan)
- Löfte (redan specificerat i frågan)
Arraysmetoder:
- .keys()
- .värden()
- .entries()
- [Symbol.iterator]
Ämne :
- .observe() (planerades ursprungligen för ES7, men togs helt bort från specifikationen den 2 november 2015)
Nummeregenskaper och metoder (redan specificerat i frågan)
- .ärHeltal()
Jag tror att det är allt vi har utan --harmony-flaggan.
Funktioner med --harmony-flaggan:
- generatorer
- pilfunktioner (utan behov av
--harmony_arrow_functionsflaggan till skillnad frånio.js) - låt variabler - endast i
strict mode - Binära och oktala litteraler
Strängmetoder:
- .contains() (ersattes av
includes()i den faktiska ES6-specifikationen)
- .contains() (ersattes av
- .startsWith()
- .endsWith()
- .codePointAt()
- .repeat()
- .normalize()
- String.fromCodePoint
Proxy (bakom --harmony-proxies-flaggan)
Jag tror att det är allt. Kanske om jag glömde något - lägger jag till det senare på listan.
Svar #2
ES6-funktioner strömmar ner till Node i faser. Node använder Googles V8 som JavaScript-motor. Att en funktion stöds i Node betyder att den först måste implementeras i V8 och sedan måste Node-teamet införliva den i Node.js.
Teamet på Google släpper en ny version av V8 ungefär var sjätte vecka, och sedan är det upp till Node-teamet att ta den i bruk.
Manuellt sammanställda listor över språkfunktioner är trevliga men kan snabbt bli föråldrade. Node 0.12 är inte så i flux längre, men vanligtvis blir manuellt sammanställda listor föråldrade så snart en ny version av Node släpps.
Här är två alternativa sätt att kontrollera vilka funktioner en Node-version stöder, utan att förlita sig på en statisk lista. För vidare läsning och mer detaljerade exempel på hur man använder dessa, kan du kolla "Hur man kontrollerar om Node.js stöder ES 6 språkfunktioner"
#1 Enkel - kompatibilitetstabell
En dynamiskt genererad lista som förlitar sig på små tester för att bekräfta närvaron av en språkfunktion håller sig bättre uppdaterad. En sådan populär lista är kangax.github.io/compat-table/es6/. Vi är endast intresserade av Node-funktioner, så du kan använda
http://node.green
som utnyttjar samma data som kangax-sidan.
#2 Svår - backtrack V8-version
Node använder V8-motorn, så att bestämma vilken version av V8 som ingår i Node berättar vilka ES6-språkfunktioner som stöds. Du kan ta reda på vilken version av V8 som paketades i Node med node -p process.versions.v8.
node -p process.versions.v8
4.6.85.31
Därefter kan du med hjälp av Googles V8-projektresurser ta reda på vilka funktioner som är implementerade i varje version. V8-projektet håller en felspårare där du kan hitta ES6+ funktioner markerade med etiketten harmony.
