2010-02-15 16 views
33

मुझे पता है कि दोनों भाषाएं एक ही ईसीएमए -262 मानक से हैं। ऐसा लगता है कि दोनों जावास्क्रिप्ट के साथ बहुत ही समान होते जा रहे हैं, जिसमें ऑब्जेक्ट्स उदाहरणों के लिए इवेंट श्रोताओं को freeze और seal जैसे ईएमसीएस्क्रिप्ट-262 5 वें संस्करण और इस तरह के तरीकों के माध्यम से शामिल किया गया है। मैं सोच रहा था कि मतभेद क्या हैं?जावास्क्रिप्ट और एक्शनस्क्रिप्ट 3 के बीच महत्वपूर्ण अंतर क्या हैं?

+3

वास्तव में एक ही मानक नहीं है। एएस -3 अब मृत-मृत ईसीएमएस्क्रिप्ट 4 (ए.के.ए. जावास्क्रिप्ट 2.0) से है, और जावास्क्रिप्ट जो हम अब देखते हैं वह ज्यादातर ईएसएमएस्क्रिप्ट 3 से है। – kennytm

उत्तर

31

सबसे पहले एक्शनस्क्रिप्ट 3 और जावास्क्रिप्ट दोनों को ECMA-262 में परिभाषित किया गया है, इसलिए उनके पास बहुत आम है। दोनों भाषाओं में उदाहरण के लिए प्रोटोटाइप विरासत की सुविधा है। हालांकि यह सही नहीं है कि एक्शनस्क्रिप्ट ES4 लागू करता है।

एक्शनस्क्रिप्ट ईसीएमए -262 और कुछ में परिभाषित नहीं की गई कुछ विशेषताओं को लागू करता है - लेकिन निश्चित रूप से सभी ES4 के नहीं।

तो एएस 3 ईसीएमए -262 में क्या जोड़ता है?उन लोगों को भी जावास्क्रिप्ट को अंतर हैं:

  • गतिशील रूप से और स्थिर टाइप किया कोड
  • संकुल, वर्ग और इंटरफेस
  • स्टैंडर्ड OO विरासत मॉडल (आधारित प्रोटोटाइप नहीं, स्थिर टाइप किया)
  • uint और पूर्णांक डेटाप्रकार
  • E4X (ECMA-357)
  • टाइप सुरक्षित सशर्त संकलन (ES4)
  • वेक्टर। < टी > डेटाटाइप (ES4)

शायद मैं कुछ विशेषताओं को भूल गया हूं। मुझे यकीन नहीं है कि एक्सएमएल, एक्सएमएल लिस्ट इत्यादि पहले ही 262 में परिभाषित हैं या 357 के साथ आए हैं।

मुख्य अंतर हालांकि मानक पुस्तकालय है। जावास्क्रिप्ट दो पूर्वनिर्धारित वर्गों जैसे डोमेलेमेंट और ब्राउज़र आश्रित परिवर्धन के साथ आता है। एक्शनस्क्रिप्ट में वीडियो स्ट्रीमिंग जैसी सुविधाओं के साथ काफी बड़ी मानक लाइब्रेरी है और सभी प्लेटफार्मों पर सुसंगत है।

5

एक प्रकार का प्रकार सुरक्षित है। एक्शनस्क्रिप्ट के लिए आवश्यक है कि आप सभी ऑब्जेक्ट्स के लिए एक प्रकार सेट करें, और जावास्क्रिप्ट नहीं करता है (उस मामले के लिए, जावास्क्रिप्ट में, एक चर एक प्रकार का हो सकता है और फिर तुरंत दूसरे प्रकार पर सेट हो सकता है)।

एक्शनस्क्रिप्ट ऑब्जेक्ट उन्मुख है। यद्यपि आप इसे जावास्क्रिप्ट में सॉर्ट कर सकते हैं, एक्शनस्क्रिप्ट ऑब्जेक्ट विरासत इत्यादि के लिए अनुमति देता है।

+0

जैसे एएस 2 (याय!) –

+7

जावास्क्रिप्ट में विरासत है। यह प्रोटोटाइप विरासत है। – kennytm

+2

नहीं, आपको एक्शनस्क्रिप्ट में ऑब्जेक्ट संदर्भ टाइप करने की आवश्यकता नहीं है। आप जावास्क्रिप्ट जैसा ही करते हैं: var x = ... –

12

मैं एक्शनस्क्रिप्ट और जावास्क्रिप्ट दोनों में प्रोग्रामिंग कर रहा हूं, और कम-तकनीकी दृष्टिकोण से, मुझे दो मुख्य अंतर दिखाई देते हैं।

1) जावास्क्रिप्ट अधिक शक्तिशाली है। आपको भाषा के साथ और अधिक करने की अनुमति है क्योंकि इसमें "कंपाइलर" या प्रकार नहीं हैं। ExtJS और jQuery जैसे कुछ महान ढांचे हैं जो आपके लिए चीजों को आजमाते और सरल बनाते हैं, लेकिन उनके साथ भी, आपको वास्तव में एक अद्भुत राशि होने की अनुमति है यदि आप चाहें तो।

2) एक्शनस्क्रिप्ट अधिक सीमित है और इसलिए, बनाए रखना बहुत आसान है। ईसीएमएस्क्रिप्ट के कठिन हिस्सों से आपको दूर रखने के लिए एडोब ने बहुत काम किया। ईसीएमएस्क्रिप्ट ऑब्जेक्ट्स, प्रोटोटाइप विरासत, और बंद तीन अवधारणाएं हैं जिन्हें आपको वास्तव में एक्शनस्क्रिप्ट में प्रोग्राम को समझने की आवश्यकता नहीं है। आपको बस समझने की जरूरत है कि एडोब की "कक्षा" ऑब्जेक्ट का उपयोग कैसे करें।

सरल उपयोगों के लिए, मैं जावास्क्रिप्ट पसंद करता हूं। हालांकि, एक बार परियोजना बड़ी हो जाने पर, यह निर्भर करता है कि आप किसके लिए कोडिंग कर रहे हैं। अगर मेरे पास एक स्क्रैपी स्टार्ट-अप पर 5 डेवलपर्स प्रोग्रामिंग की एक टीम थी, तो मैं दिल की धड़कन में जावास्क्रिप्ट चुनूंगा। हालांकि, एक बड़े निगम, या अकादमिक के परिधि में, आप एडोब के मंच पर सुरक्षित भरोसा कर सकते हैं।

उम्मीद है कि मदद करता है।

+3

* "सरल उपयोगों के लिए, मैं जावास्क्रिप्ट पसंद करता हूं।" * क्षमा करें? मैंने सोचा कि एक्शनस्क्रिप्ट फ्लैश के बाहर इस्तेमाल नहीं किया जा सकता है। – kennytm

+0

यह सच है, यह नहीं कर सकता। मुझे खेद है अगर मैंने इसका निंदा किया। छोटी परियोजनाओं के लिए जावास्क्रिप्ट का उपयोग करने का आधा कारण यह है कि उपयोगकर्ता को फ्लैश से निपटने की आवश्यकता नहीं होगी। – Stephano

+0

अच्छे अंक Stephano। जानकारी की सराहना करें। – Chin

4

अनिवार्य रूप से मुख्य अंतर मुझे लगता है कि एक्शनस्क्रिप्ट एक वर्बोज़ स्थिर रूप से टाइप की गई क्लास-आधारित भाषा है जहां जावास्क्रिप्ट एक प्रोटोटाइप भाषा है।

दुर्भाग्य से एक्शनस्क्रिप्ट में कोई प्रकार-अनुमान नहीं है इसलिए फ्लेक्स बिल्डर का उपयोग करते समय हर बार जब आप अनावश्यक और अत्यधिक वर्बोज़ पाते हैं, तो चेतावनी देता है, न केवल यह जावास्क्रिप्ट की तुलना में अधिक वर्बोज़ बनाता है बल्कि मुझे समकक्ष कोड मिल जाता है सी # से अधिक verbose हो।

हालांकि अतिरिक्त वर्बोसिटी में उपज सुधार और अतिरिक्त प्रकार की सुरक्षा संकलन-समय पर होती है। दुर्भाग्यवश यह किसी भी आकार के जावा स्क्रिप्ट ऐप्स में काफी महत्वपूर्ण समय बनाने के लिए भी जोड़ता है, जिसका उपयोग तत्काल प्रतिक्रिया के लिए किया जाता है जबकि मेरी आखिरी एक्शनस्क्रिप्ट परियोजना ने 2 मिनट से अधिक समय का निर्माण किया था।

3

मुख्य अंतर यह है कि एक्शनस्क्रिप्ट 3 कक्षा-आधारित विरासत और प्रोटोटाइप विरासत दोनों का समर्थन करता है, कक्षा नामों और फ़ाइल नामों के बीच नामस्थान बाइंडिंग लागू करता है, और कुछ वैश्विक जावास्क्रिप्ट विधियों जैसे eval का समर्थन नहीं करता है। सौभाग्य से, आप अंतराल को पुल करने के लिए कई चीजें कर सकते हैं।

use namespace ES; 
use namespace AS3; 

आप AS3 नाम स्थान का उपयोग कर रहे हैं, तो किसी भी विधि ओवरराइड AS3 नाम स्थान और ओवरराइड विशेषता का उपयोग करना होगा:

आप विश्व स्तर पर नाम स्थान ActionScript 3 के लिए ECMAScript या AS3 के लिए ES का उपयोग कर सेट कर सकते हैं।

यदि आप एएस 3 नेमस्पेस का उपयोग नहीं कर रहे हैं, तो आप प्रोटोटाइप विधियों और propertyIsEnumerable का उपयोग कर सकते हैं।

आप चुनिंदा एक गतिशील समारोह में एक संपत्ति या विधि का AS3 नाम स्थान संस्करण का उपयोग कर सकते हैं: compc -as3=false -strict=false -es=true

:

var nums:Array = new Array(1, 2, 3); 
nums.AS3::pop(); 
trace(nums); // output: 1,2 

वर्ग आधारित विरासत बंद करने के लिए, आप निम्न संकलक विकल्पों का उपयोग कर सकते हैं

import * 
class foo 
    { 
    dynamic function foo() 
    { 

    } 
    } 

यदि आप एएस 3 नेमस्पेस का उपयोग नहीं करते हैं, तो कोर क्लास का एक उदाहरण प्रोटोटाइप ऑब्जेक्ट पर परिभाषित गुणों और विधियों को प्राप्त करता है।

यदि आप एएस 3 नेमस्पेस का उपयोग करने का निर्णय लेते हैं, तो कोर क्लास का एक उदाहरण कक्षा परिभाषा में परिभाषित गुणों और विधियों को प्राप्त करता है।

यहाँ ECMAScript-4 और ECMAScript-2017 या बाद में जो आम सुविधाओं है:

 
Feature 		 ES4/ES6+ 	ES4 Only      
Rest parameter 		 ☑ 
Destructuring 		 ☑ 
ByteArrays 		 ☑ 
Class 		 	 ☑ 
Interface 		 		 ☑ 
Static fields 		 		 ☑ 
Parameter default 	 ☑ 
Rest Parameters 	 ☑ 
Bound methods 		 		 ☑ 
dynamic this value 			 ☑ 
multiple catch clauses 			 ☑ 
short-circuit-and (&&=) 		 ☑ 
short-circuit-or (||=) 			 ☑ 
Type Annotations 			 ☑ 

संदर्भ

1

देखने के एक डेवलपर के दृष्टिकोण से, क्या सबसे अधिक महत्वपूर्ण हैं:

1) Jav एस्क्रिप्ट वास्तव में ओओपी नहीं है, इसमें कोई सुपर कीवर्ड नहीं है, जिसका अर्थ है कि यदि आप कुछ (किसी भी तरह से) ओवरराइड करते हैं, तो आप इसे सुपर के माध्यम से नहीं बुला सकते हैं, और जटिल कार्यक्रमों के लिए यह सौदा ब्रेकर है जिसके लिए ओओपी कुंजी है, और एक्शनस्क्रिप्ट 3 सभी ओओपी है, आपके पास एक्शनस्क्रिप्ट 3 कोड की मिलियन लाइन मिलकर काम कर सकती है, और अच्छी तरह से बनाए रखा जा सकता है।

2) एक्शनस्क्रिप्ट 3 फ़्लैश प्लेयर में चलता है जिसमें एडोब से केवल एक ही कार्यान्वयन होता है, इसका मतलब यह है कि यह हर समय, सभी ब्राउज़रों (जब तक फ़्लैश प्लेयर स्थापित होता है) लगातार होता है, लेकिन जावास्क्रिप्ट सीधे ब्राउज़र में चलता है, लेकिन प्रत्येक ब्राउज़र में इसका होता है स्वयं का कार्यान्वयन, जिसका अर्थ यह है कि काम करने के लिए सभी लक्षित ब्राउज़रों के खिलाफ आपका जावास्क्रिप्ट कोड परीक्षण किया जाना चाहिए।

+0

"जावास्क्रिप्ट वास्तव में ओओपी नहीं है"। जावास्क्रिप्ट बहुत ऑब्जेक्ट उन्मुख है। आप क्या फालतू की बातें कर रहे हैं। "आप सुपर के माध्यम से [एक ओवरराइड विधि] नहीं कॉल कर सकते हैं"। तथ्य यह है कि आप प्रोटोटाइप आधारित भाषा में कक्षा-आधारित मुहावरे की उम्मीद कर रहे हैं। मुझे लगता है कि आप पाएंगे कि जावास्क्रिप्ट पॉलिमॉर्फिज्म के लिए सक्षम है। "जटिल कार्यक्रमों के लिए सौदा ब्रेकर जिसके लिए ओओपी कुंजी है" ओओपी सबकुछ का समाधान नहीं है। मुझे लगता है कि आपको ऐसे भयानक दावे करने से पहले अन्य प्रोग्रामिंग प्रतिमानों को देखना चाहिए। –

+0

"एक्शनस्क्रिप्ट 3 फ़्लैश प्लेयर में चलता है जिसमें केवल एक कार्यान्वयन होता है ... लेकिन जावास्क्रिप्ट ... प्रत्येक ब्राउज़र का अपना कार्यान्वयन होता है, जिसका अर्थ है कि आपके जावास्क्रिप्ट कोड को सभी लक्षित ब्राउज़रों के खिलाफ परीक्षण किया जाना चाहिए ..." पूर्ण और पूर्ण बकवास। सभी व्यापक रूप से उपयोग की जाने वाली भाषाओं को मानक द्वारा परिभाषित किया जाता है। मानक परिभाषित करता है कि भाषा को कैसे कार्यान्वित किया जाना है, और किसी भी गंभीर कार्यान्वयन मानक का पालन करने जा रहा है। यदि आपको "फीचर टेस्ट" की आवश्यकता है, तो आप एक विक्रेता एक्सटेंशन का उपयोग कर रहे हैं। यह असंगत होने के लिए भाषा की गलती नहीं है; यह गैर मानक सुविधाओं/एक्सटेंशन का उपयोग करने के लिए आपका है। –

-3

स्पष्ट रूप से यह वही नहीं है, cuz action script eMQJ24, उच्च विकास वेबसाइट के लिए नई भाषा के साथ लोड किया गया है। जबकि जेएस अभी भी इसके साथ ईएमसीए 22 है, उनके बीच का अंतर कोड की शैली और प्रारूप है। और एक्शन स्क्रिप्ट भी उम्र की आयु है, यही कारण है कि अधिकांश प्रोग्रामर आज सीएसएस से सीएसएक्स 01 अपडेटेड भाषा का उपयोग कर रहे हैं, यह बिना किसी लाइन के सभी प्रकार की भाषा को पहचान सकता है।

+4

क्या आप आम अंग्रेजी से चिपक सकते हैं? मैंने जो लिखा है उसे समझने में मुझे मुश्किल है। – MeanGreen

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