|
| 1 | +# ES6 ja io.js |
| 2 | + |
| 3 | +io.js nojaa tuoreisiin [V8](https://code.google.com/p/v8/):n versioihin. Pysymällä ajan tasalla viimeisimpien versioiden kanssa varmistetaan sekä uusimpien [JavaScript ECMA-262 specification](http://www.ecma-international.org/publications/standards/Ecma-262.htm) ominaisuuksien, että suorituskykyyn ja vakauteen liittyvien parannusten nopea saapuminen kehittäjien ulottuville. |
| 4 | + |
| 5 | +io.js:n versio 1.2.0 sisältää V8 version 4.1.0.14, mikä ES6:n osalta ylittää tuntuvasti ominaisuuksiltaan version 3.28.72 mikä sisältyy Node.js™ 0.12.x-versioihin. |
| 6 | + |
| 7 | +## Ei enää --harmony lippua |
| 8 | + |
| 9 | +Node.js™@0.12.x (V8 3.28+) ajonaikainen `--harmony`-lippu aktivoi kaikki **valmiit**, **koekäyttövaiheen** ja **kehitysvaiheen** ES6-ominaisuudet (poikkeuksena `proxies`, joille on oma `--harmony-proxies`-lippunsa). Toisin sanoen jotkin bugiset tai jopa rikkinäiset ominaisuudet kuten [Arrow Functions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions) on yhtä lailla käytettävissä kuin [generators](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function*), millä on vähän tai ei yhtään tunnettuja ongelmia. Usein kehittäjät ottavat käyttöön vain tiettyjä ominaisuuksia käyttämällä täsmällisiä ajonaikaisia ominaisuuslippuja (esim. `--harmony-generators`), tai yksinkertaisesti ottavat kaiken käyttöön ja pitäytyvät käytössään rajatussa osassa. |
| 10 | + |
| 11 | +io.js@1.8 (V8 4.1+) myötä nuo hankaluudet poistuvat. Kaikki harmonyn ominaisuudet on nyt loogisesti jaoteltu kolmeen ryhmään, eli **valmiisiin**, **koekäyttövaiheen** ja **kehitysvaiheen** ominaisuuksiin: |
| 12 | + |
| 13 | +* **Valmiit** ominaisuudet, eli ne jotka V8 määrittelee vakaiksi (_stable_), kuten [generators](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function*), [templates](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/template_strings), [new string methods](https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/ECMAScript_6_support_in_Mozilla#Additions_to_the_String_object) ja moni muu on **oletuksena käytössä io.js:ssä**, eikä siis vaadi minkäänlaisia ajonaikaisia lippuja |
| 14 | +* **Koekäyttövaiheen** ominaisuudet ovat lähes valmiita ominaisuuksia mitkä ei vielä ole täysin testattuja tai päivitetty vastaamaan uusinta määrittelyä, eikä siksi pidetä V8-tiimin osalta vakaina (_stable_) (esim. voi olla olemassa joitain vielä tuntemattomia rajatapauksia). Tätä tilaa vastaa luultavasti [generators](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function*) versiossa 3.26. Nämä ovat "käytä omalla vastuullasi" tyyppisiä ominaisuuksia, mitkä nyt vaativat käyttöönottoa varten ajonaikaisen lipun: `--es_staging` (tai sen synonyymin `--harmony`). |
| 15 | +* **Kehitysvaiheen** ominaisuudet on otettavissa käyttöön yksitellen kunkin omalla lipullaan (esim. `--harmony_arrow_functions`), joskin se ei ole suositeltavaa kuin koemielessä. |
| 16 | + |
| 17 | +## Mitkä ES6 ominaisuudet ovat io.js:ssä oletuksena käytössä (ilman ajonaikaisia lippuja)? |
| 18 | + |
| 19 | +* Block scoping |
| 20 | + |
| 21 | + * [let](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let) |
| 22 | + |
| 23 | + * [const](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const) |
| 24 | + |
| 25 | + * `function`-in-blocks |
| 26 | + |
| 27 | + >As of v8 3.31.74.1, block-scoped declarations are [intentionally implemented with a non-compliant limitation to strict mode code](https://groups.google.com/forum/#!topic/v8-users/3UXNCkAU8Es). Developers should be aware that this will change as v8 continues towards ES6 specification compliance. |
| 28 | +
|
| 29 | +* Collections |
| 30 | + |
| 31 | + * [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) |
| 32 | + |
| 33 | + * [WeakMap](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap) |
| 34 | + |
| 35 | + * [Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) |
| 36 | + |
| 37 | + * [WeakSet](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet) |
| 38 | + |
| 39 | +* [Generators](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function*) |
| 40 | + |
| 41 | +* [Binary and Octal literals](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Numeric_literals) |
| 42 | + |
| 43 | +* [Promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) |
| 44 | + |
| 45 | +* [New String methods](https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/ECMAScript_6_support_in_Mozilla#Additions_to_the_String_object) |
| 46 | + |
| 47 | +* [Symbols](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol) |
| 48 | + |
| 49 | +* [Template strings](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/template_strings) |
| 50 | + |
| 51 | +Yksityiskohtaisempi lista, mihin sisältyy myös vertailu muihin suoritusympäristöihin, löytyy [compat-table](https://kangax.github.io/compat-table/es6/) -projektin sivulta. |
| 52 | + |
| 53 | +## Mitä ES6 ominaisuudet ovat --es_staging lipun takana? |
| 54 | + |
| 55 | +* [Classes](https://github.com/lukehoban/es6features#classes) (strict mode only, behind flag `--harmony_classes` which implies block scoping & object literal extensions) |
| 56 | + |
| 57 | +* [Object literal extensions](https://github.com/lukehoban/es6features#enhanced-object-literals) (behind flag `--harmony_object_literals`) |
| 58 | + |
| 59 | +* [`Symbol.toStringTag`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol) (user-definable results for `Object.prototype.toString`, behind flag `--harmony_tostring`) |
| 60 | + |
| 61 | +## Mitkä ES6 ominaisuudet ovat kehitysvaiheessa? |
| 62 | + |
| 63 | +Uusia ominaisuuksia lisätään jatkuvasti V8-suoritusympäristöön. Yleisesti voi olettaa niiden kaikkien päätyvän io.js:n tulevaisuudessa, joskin tarkka ajoitus on toistaiseksi vielä tuntematon. |
| 64 | + |
| 65 | +Voit listata kaikki saatavilla olevat *kehitysvaiheen* ominaisuudet kustakin io.js:n julkaisusta hakemalla `--v8-options` tulosteesta. Huomioithan, että nämä ovat keskeneräisiä ja mahdollisesti rikkinäisiä V8:n ominaisuuksia, joten käytät niitä omalla vastuullasi: |
| 66 | + |
| 67 | +```sh |
| 68 | +iojs --v8-options | grep "in progress" |
| 69 | +``` |
| 70 | + |
| 71 | +## Hyödynnän infrastuktuurissani --harmony lippua. Tulisiko minun ottaa se pois käytöstä? |
| 72 | + |
| 73 | +Tällä hetkellä `--harmony`-lippu tuo io.js:ssä käyttöön vain **koekäyttövaiheen** ominaisuudet. Käytännössä se on siis `--es_staging`-lipun synonyymi. Kuten yllä on todetaan, nämä ovat valmiita ominaisuuksia mitä ei vielä pidetä vakaina (_stable_). Jos haluat pelata varman päälle, erityisesti tuotantoympäröissä, on syytä harkita tämän ajonaikaisen lipun käytöstä poistamista kunnes se on oletuksena käytössä V8:ssa ja sen myötä myös io.js:ssä. Jos kuitenkin pidät sen käytössä, varaudu siihen, että io.js:n päivitys voi aiheuttaa koodin rikkoutumista mikäli V8 alkaa seuraamaan standardeja tarkemmin. |
| 74 | + |
| 75 | +## Mistä löydän tiedon siitä mikä versio V8:sta missäkin io.js:n versiossa on käytössä? |
| 76 | + |
| 77 | +io.js tarjoaa yksinkertaisen tavan listata kaikki riippuvuudet versioineen jotka toimitetaan kunkin binäärin osana globaalin `process`-objektin kautta. V8-suoritusympäristön ollessa kyseessä, seuraava komentorivikomento palauttaa sen version: |
| 78 | + |
| 79 | +```sh |
| 80 | +iojs -p process.versions.v8 |
| 81 | +``` |
0 commit comments