Rozpoczynam pracę z Node.js i mam problem ze znalezieniem wersji JavaScript obsługiwanej przez węzeł, co utrudnia ustalenie, jakich funkcji mogę użyć. Oto co wiem.
- Węzeł używa V8
- V8 implementuje ECMAScript zgodnie z ECMA-262, wydanie 3
- ECMA-262, 3. edycja to JavaScript 1.5
Biorąc to pod uwagę, zakładam, że mogę użyć kodu zgodnego z JavaScript 1.5 w węźle. Okazuje się jednak, że mogę użyćArray.forEach
między innymi konstrukcje, mimo że według MDC jest on dostępny dopiero w Javascript 1.6 - ECMA-262, wydanie 5.
Gdzie się mylę? Czy jest gdzieś dokument, który szczegółowo opisuje dostępne funkcje językowe?
javascript
node.js
v8
emtrane
źródło
źródło
Odpowiedzi:
Ta macierz (V8 dość blisko podąża za kolumną WebKit) wydaje się całkiem dobrze odpowiadać na pytanie „jakich funkcji mogę używać?” ale nie mogę znaleźć kanonicznej odpowiedzi na pytanie „która wersja javascript jest obsługiwana?” O ile wiem, najlepsza odpowiedź brzmi: 3. edycja ECMA-262 jest obsługiwana, ale wiele funkcji piątej edycji jest również obsługiwanych.
Istnieje dobre wyjaśnienie, dlaczego V8 podąża za funkcjami WebKit i JavaScriptCore w tym wątku .
źródło
Wersja javascript Node zależy od wersji v8 używanej przez Node. Węzeł w wersji 0.5.1 (14 lipca 2011 r.) I nowsze używają wersji 8 3.4.10 lub nowszej i są to 5. wydanie ECMA-262, a nie 3. wydanie. Wydanie piąte jest odpowiednikiem Javascript 1.8.5. Zobacz poniżej powody.
Od 21 maja 2011 do 15 czerwca 2011 strona v8 przestała wymieniać v8 jako implementującą 3. edycję ECMA-262 i zaczęła pokazywać 5. edycję. http://web.archive.org/web/20110521053630/http://code.google.com/p/v8/ http://web.archive.org/web/20110615102350/http://code.google. com / p / v8 /
Zgodnie z dziennikiem zmian w wersji 8, 15 czerwca 2011 r. Wersja 8 została zmieniona na wersję 3.4.4. Więc ta wersja i późniejsze to wydanie 5.
Zgodnie z dziennikiem zmian węzła, wersja 8 3.4.10 znajdowała się w wersji Node 0.5.1, 14 lipca 2011 r., Więc ta wersja i nowsze to 5. edycja ECMA-26. Nie oznacza to jednak, że wersje v8 przed 3.4.10 były czysto trzecią edycją, ponieważ mogło następować stałe przejście z 3. na 5. poprzez wiele wersji v8.
źródło
Wygląda na to, że w pewnym momencie node.green został utworzony, aby śledzić obsługę funkcji JavaScript w różnych wersjach Node.
źródło
Wygląda na to, że zostaliśmy zredukowani do dwóch strategii, aby dowiedzieć się, która wersja węzła JavaScript używa:
Strategia 1: zaufaj temu, co mówi gdzieś jakiś dokument, co w wielu przypadkach jest błędne. Nie znalazłem tabeli wskazującej pary klucz-wartość, których wersja węzła obsługuje daną wersję ECMAScript.
Strategia 2: zgadnij i sprawdź.
Znajdź funkcję cytowaną przez ES6 i „zobacz, czy się nie powiedzie”, na przykład:
el@apollo:~/code$ echo "console.log('blue'.includes('blue'))" > a.js el@apollo:~/code$ cat a.js console.log('blue'.includes('blue')) el@apollo:~/code$ node a.js /home/el/code/javascript/02/a.js:1 ports, require, module, __filename, __dirname) { console.log('blue'.includes(' ^ TypeError: undefined is not a function at Object.<anonymous> (/home/el/code/javascript/02/a.js:1:82) at Module._compile (module.js:460:26) at Object.Module._extensions..js (module.js:478:10) at Module.load (module.js:355:32) at Function.Module._load (module.js:310:12) at Function.Module.runMain (module.js:501:10) at startup (node.js:129:16) at node.js:814:3 el@apollo:~/code$ babel-node a.js true
Przypuszczam, że „babel” jest tu odniesieniem do Tanach. Jakie funkcje obsługuje nasza wersja węzła? Cóż, nie wiem, będziesz musiał to ręcznie przetestować. To będzie gigantyczna MESS. A co gorsza, wydaje się być celowe.
źródło