जावास्क्रिप्ट का कौन सा संस्करण नोड.जेएस में समर्थित है


81

मैं Node.js के साथ आरंभ कर रहा हूं और मुझे यह पता लगाने में कठिन समय मिल रहा है कि जावास्क्रिप्ट का कौन सा संस्करण नोड द्वारा समर्थित है, जो यह पता लगाना मुश्किल बनाता है कि मैं किन विशेषताओं का उपयोग कर सकता हूं। यहां मैं जानता हूं।

  • नोड V8 का उपयोग करता है
  • V8 ईसीएमएस्क्रिप्ट लागू करता है जैसा कि ईसीएमए -262, 3 डी संस्करण में निर्दिष्ट है
  • ECMA-262, तीसरा संस्करण जावास्क्रिप्ट 1.5 है

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

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



और नोड्स डॉक्स के अनुसार एक 05.2016 अपडेट, वे जावास्क्रिप्ट ईसीएमए -262 विनिर्देश, 6 वें संस्करण का पालन करते हैं और "सभी ईसीएमएस्क्रिप्ट 2015 ( ईएस 6 ) सुविधाओं को शिपिंग, मंचन और प्रगति सुविधाओं के लिए तीन समूहों में विभाजित किया गया है"
पेटार डोनचेव मारिनोव

ECMA-262 ECMAScript 5.1 जावास्क्रिप्ट 1.8.5 है, यह भी देखें (नीचे विनिर्देशों पर स्क्रॉल करें): developer.mozilla.org/nl/docs/Web/JavaScript/Reference/…
कोडबीट

जवाबों:


37

यह मैट्रिक्स (V8 WebKit कॉलम का काफी बारीकी से अनुसरण करता है) इस सवाल का बहुत अच्छा जवाब देता है "मैं किन विशेषताओं का उपयोग कर सकता हूं?" लेकिन मैं "क्या संस्करण समर्थित है जावास्क्रिप्ट का एक कैनोनिकल जवाब नहीं मिल सकता है?" जहाँ तक मैं बता सकता हूँ, इसका सबसे अच्छा उत्तर यह है: ECMA-262 3rd संस्करण समर्थित है, लेकिन 5th संस्करण की कई विशेषताएं भी समर्थित हैं।

इस बात की अच्छी व्याख्या है कि V8 इस धागे पर WebKit और JavaScriptCore कार्यक्षमता का अनुसरण क्यों करता है ।



32

नोड जावास्क्रिप्ट संस्करण V8 के किस संस्करण पर निर्भर करता है, जिसका उपयोग नोड करता है। नोड संस्करण 0.5.1 (14 जुलाई 2011) और ऊपर की ओर v8 3.4.10 या बाद के संस्करण का उपयोग करते हैं, और 5 वें संस्करण ECMA-262 हैं, बजाय 3 जी संस्करण। 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/2011061510232350/http://code.google। com / p / v8 /

V8 चैंज के अनुसार, 15 जून 2011 को v8 3.4 संस्करण में बदल गया। तो वह संस्करण और बाद में 5 वें संस्करण हैं।

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


खैर, भले ही V8 5 वें संस्करण पर स्विच कर रहा था, लेकिन नोड का कोई सबूत नहीं है वास्तव में इसके साथ पूरी तरह से 0.5.1+ संस्करणों में इसका अनुपालन कर रहा है। मेरा 0.6.12 Object.prototype.getOwnPropertyNames () का समर्थन नहीं कर रहा है, हालांकि यह ECMA262-5th 15.2.3.4 में सूचीबद्ध है।
सूतक

1
मेरी पिछली टिप्पणी को ठीक करना है क्योंकि बताई गई विधि Object.protoype (जो वास्तव में नोड 0.6.12 के साथ शामिल है) के लिए बाध्य होने के बजाय एक स्थिर है और इस प्रकार NodeJS का कोई सबूत नहीं है कि ECMA262-5th का पूरी तरह से समर्थन नहीं कर रहा है ...
21

20

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


1

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

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

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

ईएस 6 द्वारा उद्धृत एक विशेषता खोजें और "देखें कि क्या यह विफल रहता है", कुछ इस तरह से:

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 बनने जा रहा है। और बदतर, यह उद्देश्य पर लगता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.