node.js에서 지원되는 Javascript 버전


81

Node.js를 시작하고 있는데 노드에서 지원하는 JavaScript 버전을 파악하는 데 어려움이있어서 어떤 기능을 사용할 수 있는지 파악하기 어렵습니다. 여기 내가 아는 것이 있습니다.

이를 감안할 때 노드에서 JavaScript 1.5 호환 코드를 사용할 수 있다고 가정합니다. 그러나 Array.forEachMDC에 따르면 Javascript 1.6-ECMA-262, 5th edition까지 사용할 수 없더라도 다른 구성 중에서를 사용할 수 있습니다.

내가 어디로 잘못 가고 있습니까? 사용 가능한 언어 기능을 자세히 설명하는 문서가 어딘가에 있습니까?



그리고 05.2016 업데이트에 따라 nodejs 워드 프로세서 , 그들은 다음과 자바 스크립트 ECMA-262 사양, 6 버전을 하고 "배송 세 그룹으로 모든 ECMAScript를 2015 년 (ES6) 기능은 분할, 연출, 진행중인 기능"
페 타르 Donchev Marinov

ECMA-262는 ECMAScript 5.1은 Javascript 1.8.5입니다. 또한 참조 (사양으로 스크롤) : developer.mozilla.org/nl/docs/Web/JavaScript/Reference/…
Codebeat

답변:


37

이 매트릭스 (V8은 WebKit 열을 상당히 가깝게 따릅니다)는 "어떤 기능을 사용할 수 있습니까?"라는 질문에 꽤 잘 대답하는 것 같습니다. 그러나 "어떤 버전의 javascript가 지원됩니까?"에 대한 정식 답변을 찾을 수 없습니다. 내가 말할 수있는 한, 가장 좋은 대답은 다음과 같습니다. ECMA-262 3rd 에디션이 지원되지만 5th 에디션의 많은 기능도 지원됩니다.

V8 이이 스레드 에서 WebKit 및 JavaScriptCore 기능을 따르는 이유에 대한 좋은 설명 있습니다.


1
2020 업데이트 : Nate Whittaker답변을 참조하십시오 .
rinogo

32

Node javascript 버전은 Node가 사용하는 v8 버전에 따라 다릅니다. 노드 버전 0.5.1 (2011 년 7 월 14 일) 이상은 v8 3.4.10 이상을 사용하며 3 판이 아닌 5 판 ECMA-262입니다. 5th edition은 Javascript 1.8.5와 동일합니다. 아래 이유를 참조하십시오.

2011 년 5 월 21 일부터 2011 년 6 월 15 일 사이에 v8 웹 사이트는 3 판 ECMA-262를 구현하는 것으로 v8을 나열하는 것을 중단하고 5 판을 표시하기 시작했습니다. http://web.archive.org/web/20110521053630/http://code.google.com/p/v8/ http://web.archive.org/web/20110615102350/http://code.google. com / p / v8 /

v8 변경 로그에 따르면 2011 년 6 월 15 일에 v8이 버전 3.4.4로 변경되었습니다. 그래서 그 버전 이상은 5 판입니다.

Node changelog에 따르면 v8 3.4.10은 Node 버전 0.5.1 (2011 년 7 월 14 일)에 있었으므로 버전 이상은 ECMA-26 5 판입니다. 이것은 3.4.10 이전의 v8 버전이 순전히 3 번째 버전이라는 것을 의미하지는 않습니다. 많은 v8 버전을 통해 3 번째에서 5 번째로 꾸준한 전환이 있었기 때문입니다.


글쎄요, V8이 5 판으로 바뀌 었음에도 불구하고 Node가 0.5.1+ 버전에서 실제로 그것을 완전히 준수한다는 증거는 없습니다. 내 0.6.12는 ECMA262-5th 15.2.3.4에 나열되어 있지만 Object.prototype.getOwnPropertyNames ()를 지원하지 않습니다.
soletan

1
한 방법 대신에 (실제로 노드 0.6.12에 포함되어 있습니다) 따라서 완전히 ... ECMA262-5th를 지원하지 않는 NodeJS의 증거가없는 Object.protoype에 결합되는 정적의 하나이기 때문에 내 이전 의견을 수정해야
soletan


1

Javascript 노드가 어떤 버전을 사용하는지 파악하기 위해 두 가지 전략으로 축소 된 것 같습니다.

전략 1 : 어떤 문서가 어딘가에서 말하는 것을 신뢰합니다. 이는 많은 경우에 잘못된 것입니다. ECMAScript 버전을 지원하는 노드 버전의 키-값 쌍을 나타내는 테이블을 찾지 못했습니다.

전략 2 : 추측과 확인.

ES6에서 인용 한 기능을 찾고 다음과 같이 "실패 여부 확인"을 수행합니다.

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

여기서 "바벨"은 타 나크에 대한 참조라고 생각합니다. 우리의 노드 버전은 어떤 기능을 지원합니까? 글쎄, 모르겠다. 수동으로 테스트해야 할 것이다. 이것은 거대한 MESS가 될 것입니다. 그리고 더 나쁜 것은 의도적 인 것 같습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.