2011-02-28 13 views
60

मैं Node.js साथ शुरू हो रही हूँ और मैं एक मुश्किल समय जावास्क्रिप्ट का कौन सा संस्करण पता लगाना हो रही है नोड जो पता लगाना क्या सुविधाओं मैं कर सकते हैं यह कठिन बना देता है द्वारा समर्थित है उपयोग। मैं जो जानता हूं वह यहां है।जावास्क्रिप्ट का कौन-सा संस्करण Node.js में समर्थित है

  • Node वी 8 का उपयोग करता ECMA-262, 3 संस्करण में विनिर्दिष्ट
  • V8 ECMAScript लागू करता
  • ECMA-262, 3 संस्करण, JavaScript 1.5

यह देखते है मुझे लगता है कि मैंने उपयोग कर सकते हैं नोड में जावास्क्रिप्ट 1.5 संगत कोड। हालांकि, यह पता चला है कि मैं अन्य संरचनाओं के बीच Array.forEach का उपयोग कर सकता हूं, भले ही एमडीसी के अनुसार यह जावास्क्रिप्ट 1.6 - ईसीएमए -262, 5 वां संस्करण तक उपलब्ध नहीं है।

मैं गलत कहां जा रहा हूं? क्या वहां कोई दस्तावेज है जो उपलब्ध भाषा सुविधाओं का विवरण देता है?

+0

2015 अपडेट के लिए, देखें [ईसीएमएस्क्रिप्ट 6 विशेषताएं नोड.जेएस 0.12 में उपलब्ध हैं] (http://stackoverflow.com/questions/28388885/ecmascript-6-features-available-in-node-js-0-12)। –

+0

और 05-056 अपडेट, [नोडजेक्स डॉक्स] (https://nodejs.org/en/docs/es6/) के अनुसार, वे [जावास्क्रिप्ट ईसीएमए -262 विनिर्देश, 6 वां संस्करण] का अनुसरण करते हैं (http: //www.ecma- international.org/publications/standards/Ecma-262.htm) और "सभी ईसीएमएस्क्रिप्ट 2015 (ES6) सुविधाओं को शिपिंग, चरणबद्ध और प्रगति सुविधाओं के लिए तीन समूहों में विभाजित किया गया है" –

उत्तर

29

This matrix (वी 8 वेबकिट कॉलम का काफी बारीकी से अनुसरण करता है) इस सवाल का जवाब देता है कि "मैं किस विशेषताओं का उपयोग कर सकता हूं?" लेकिन मुझे जावास्क्रिप्ट का कौन सा संस्करण समर्थित है "का एक कैननिकल जवाब नहीं मिल रहा है? जहां तक ​​मैं कह सकता हूं, सबसे अच्छा जवाब यह है: ईसीएमए -262 तीसरा संस्करण समर्थित है, लेकिन 5 वें संस्करण की कई विशेषताएं भी समर्थित हैं।

क्यों वी 8 वेबकिट और this thread पर JavaScriptCore कार्यप्रणाली निम्नलिखित का एक अच्छा विवरण नहीं है।

30

नोड जावास्क्रिप्ट संस्करण नोड का उपयोग करने वाले v8 के संस्करण पर निर्भर करता है। नोड संस्करण 0.5.1 (14 जुलाई 2011) और ऊपर v8 3.4.10 या बाद में उपयोग करें, और तीसरे संस्करण की बजाय 5 वें संस्करण ईसीएमए -262 हैं। 5 वां संस्करण जावास्क्रिप्ट 1.8.5 के बराबर है। नीचे कारण देखें।

21 के बीच मई 2011 और 15 जून 2011 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 बदलाव का के अनुसार, 15 जून 2011 v8 पर संस्करण हो गया 3.4.4। तो संस्करण और बाद में 5 वां संस्करण है।

नोड बदलाव का के अनुसार, v8 3.4.10, नोड संस्करण 0.5.1, 14 जुला 2011 में किया गया है कि संस्करण तो और बाद में कर रहे हैं 5 वीं संस्करण ECMA-26। इसका मतलब यह नहीं है कि 3.4.10 से पहले v8 संस्करण पूरी तरह से तीसरे संस्करण थे, हालांकि कई v8 संस्करणों के माध्यम से तीसरे से 5 वें तक स्थिर संक्रमण हो सकता है।

+0

ठीक है, भले ही वी 8 वहां 5 वें संस्करण में स्विच कर रहा था नोड का वास्तव में संस्करण 0.5.1+ में पूरी तरह से इसका पालन करने का कोई सबूत नहीं है। मेरा 0.6.12 ऑब्जेक्ट.प्रोटोटाइप.getOwnPropertyNames() का समर्थन नहीं कर रहा है हालांकि यह ECMA262-5th 15.2.3.4 में सूचीबद्ध है। – soletan

+1

मेरी पिछली टिप्पणी को ठीक करना है क्योंकि उल्लिखित विधि ऑब्जेक्ट.प्रोटॉयपे (जिसे वास्तव में नोड 0.6.12 के साथ शामिल किया गया है) से बंधने के बजाए एक स्थिर है। इस प्रकार नोडजेएस का कोई प्रमाण नहीं है कि पूरी तरह से ECMA262-5th का समर्थन नहीं कर रहा है ... – soletan

1

ऐसा लगता है जैसे कि हम दो रणनीतियों के लिए कम हो गई है जावास्क्रिप्ट नोड का कौन सा संस्करण का उपयोग करता है यह पता लगाने की:

रणनीति 1: क्या कुछ दस्तावेज़ कहीं कहते हैं में विश्वास है, जो कई मामलों में गलत है। मुझे टेबल नहीं मिला है जो कि नोड के कौन से संस्करण के ई-एमएएसएस्क्रिप्ट के संस्करण का समर्थन करता है, के प्रमुख मूल्य जोड़े को इंगित करता है।

रणनीति 2: अनुमान और जांच।

इस तरह एक सुविधा ES6 द्वारा उद्धृत और "देख अगर यह विफल", कुछ खोजें:

[email protected]:~/code$ echo "console.log('blue'.includes('blue'))" > a.js 
[email protected]:~/code$ cat a.js 
console.log('blue'.includes('blue')) 
[email protected]:~/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 
[email protected]:~/code$ babel-node a.js 
true 

मुझे लगता है "कोलाहल" यहाँ Tanakh लिए एक संदर्भ है। नोड समर्थन के हमारे संस्करण क्या विशेषताएं हैं? खैर, मुझे नहीं पता, आपको इसे मैन्युअल रूप से जांचना होगा। यह एक विशाल MESS बनने जा रहा है। और बदतर, यह उद्देश्य पर प्रतीत होता है।

5

किसी बिंदु पर, node.green को विभिन्न नोड संस्करणों के विरुद्ध जावास्क्रिप्ट सुविधा समर्थन को ट्रैक करने के लिए बनाया गया था।

संबंधित मुद्दे