2015-07-13 9 views
79

मैंने टाइपस्क्रिप्ट कोड फ़ाइल में "सख्त उपयोग" लाइन कहां रखी है, इस बारे में पोस्ट देखी हैं। मेरा सवाल है, यह बिल्कुल क्यों है?टाइपस्क्रिप्ट फ़ाइल में आवश्यक "सख्त का उपयोग करें"?

चूंकि टाइपस्क्रिप्ट पहले से ही दृढ़ता से टाइप की गई भाषा है, "सख्त उपयोग" क्या करता है?

+2

http://stackoverflow.com/questions/1335851/what-does-use-strict-do-in-javascript-and-what-is-the-reasoning-behind-it?rq=1 –

+9

आपके द्वारा प्रदान किया गया लिंक परिभाषित करता है कि जावास्क्रिप्ट फ़ाइल में "सख्त उपयोग" क्या है। मेरा सवाल यह है कि टाइपस्क्रिप्ट फ़ाइल में यह अभी भी उपयोगी/आवश्यक है, जहां टाइपस्क्रिप्ट और टाइपस्क्रिप्ट-सक्षम संपादकों को "सख्त उपयोग" करने वाले मुद्दों के अधिकांश/सभी (?) को पकड़ लिया जाएगा। – DeborahK

+0

यदि आप इसे ईएस 6 में बना रहे हैं तो आपको इसकी आवश्यकता होगी यदि बैबेल जैसे कुछ का उपयोग करके, जेनरेटेड स्क्रिप्ट को "सख्त उपयोग" करने की आवश्यकता होती है; ' – BrunoLM

उत्तर

61

अपडेट

  • टाइपप्रति 1.8+: "use strict"; मॉड्यूल (Read more) में उत्सर्जित होता है।
  • टाइपस्क्रिप्ट 2.1+: --alwaysStrict कंपाइलर विकल्प सभी फ़ाइलों को सख्त मोड में पार्स करता है और सभी आउटपुट फ़ाइलों (Read more) के शीर्ष पर "use strict" उत्सर्जित करता है।

आप "कठोर मोड में" के लिए टाइपप्रति के परीक्षण खोज के द्वारा कुछ उदाहरण की एक सूची पा सकते हैं।

// future reserved keyword not allowed as variable name 
var let, 
    yield, 
    public, 
    private, 
    protected, 
    static, 
    implements; 

// "delete" cannot be called on an identifier 
var a; 
delete a; 

// octal literals not allowed 
03; 

वहाँ कुछ और उदाहरण हैं, जहां "use strict"; केवल कार्यावधि में एक त्रुटि फेंक रहे हैं:

यहाँ कोड के कुछ उदाहरण है कि केवल एक संकलन समय त्रुटि फेंक जाएगा जब आप "use strict"; है। उदाहरण के लिए:

"use strict"; 
delete Object.prototype; 

व्यक्तिगत रूप से, मैं नहीं मिल रहा है यह सब है कि मुझे टाइपप्रति में गलतियों और अतिरिक्त शोर यह एक फाइल करने के लिए कहते हैं बनाने से रोकने में उपयोगी मुझे इसे लिखने परेशान नहीं करता है। उस ने कहा, टीएस 2.1 में शुरू होने से मैं --alwaysStrict कंपाइलर विकल्प सक्षम कर दूंगा क्योंकि यह किसी भी कोड रखरखाव ओवरहेड के बिना मामूली अतिरिक्त कठोरता जोड़ता है।

+0

के लिए "सख्त उपयोग करें" उत्सर्जित करें कि टाइपस्क्रिप्ट इकाई परीक्षण इसे कवर करते हैं। मैं इसे देख लूँगा। उदाहरणों के लिए धन्यवाद। और मैं टाइपस्क्रिप्ट के लिए हमारे "कोडिंग मानकों" में इसे शामिल करने के बारे में सहमत नहीं हूं। – DeborahK

+0

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

+0

, टाइपस्क्रिप्ट 1.4 ईसीएमएस्क्रिप्ट 5 या उच्चतर को लक्षित करते समय ऑक्टल अक्षरों की अनुमति नहीं देता है, भले ही "सख्त उपयोग" का उपयोग न करें; – Jeremy

9

मेरे पैसे के लिए, हाँ, "use strict"; टाइपस्क्रिप्ट फ़ाइलों में शामिल किया जाना चाहिए।

  • MDN identifies performance improvements फ़ंक्शन कॉल में मुक्केबाजी this से बचने में, और हटाने:

    की अनदेखी संकलन समय "use strict"; टाइपप्रति पर की प्रभाव, वहाँ संभावना एक क्रम प्रभाव जब उत्पन्न जावास्क्रिप्ट निष्पादित किया जाता है है function.caller और function.arguments गुणों का।

  • मोज़िला के जेफ वाल्डन ने this answer में प्रदर्शन लाभ के अवसरों पर भी संकेत दिया है।

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