2009-02-01 18 views
5

यह कुछ हद तक this question से संबंधित है, लेकिन मैं जावास्क्रिप्ट में सर्वोत्तम प्रथाओं के बारे में संसाधन नहीं मांग रहा हूं, लेकिन आपकी वास्तविक सलाह है।जावास्क्रिप्ट बेस्ट प्रैक्टिस

मैं अपनी खुद की सूची से शुरू करूंगा। यदि आप सुनिश्चित हैं कि सलाह विवादास्पद नहीं है तो आप या तो कोई जवाब पोस्ट कर सकते हैं या सीधे सवाल संपादित कर सकते हैं।

ये हम चले:

  • हमेशा उपयोग var
  • निर्माता कार्यों के नाम भुनाने - तुलना के लिए और कुछ नहीं
  • उपयोग === पुरातन, उदा
  • उपयोग स्पष्ट डाले Number(), String(), के लिए के साथ typeof
  • साथ instanceof
  • जांच वस्तु प्रकार के लिए चेक आदिम प्रकार के लिए Boolean()

  • जांच Object.prototype.toString() साथ निर्मित वस्तु प्रकार पार फ्रेम मुद्दों, जैसे से बचने के लिए कंस्ट्रक्टर्स में

    Object.prototype.toString.call(obj) === '[object Array]' 
    
  • जांच this, उदा

    function MyObject() { 
        if(!(this instanceof arguments.callee)) 
         throw new Error('constructor called with invalid `this`'); 
        // [...] 
    } 
    
  • नेमस्पेसिंग लिए, उदाहरण के लिए वैश्विक गुंजाइश नहीं अपवित्र के लिए उपयोग अनाम प्रक्रियाएं for..in छोरों में

    (function() { 
        var noGlobalVar = 'foo'; 
        // [...] 
    })(); 
    
  • जांच hasOwnProperty() - यह न मानें कि कोई प्रोटोटाइप

    साथ गड़बड़ एक
  • for..in छोरों का उपयोग नहीं करते सरणियों या सरणी की तरह वस्तुओं
के तत्वों से अधिक पुनरावृति करने के लिए

उत्तर

0

प्राइमेटिव्स के लिए स्पष्ट रूपों का उपयोग करें, उदाहरण के लिए नंबर(), स्ट्रिंग(), बूलियन()

सच? मैं प्लेग की तरह उन लोगों से बचता हूं। उस पर आपकी क्या सोच है?

+1

मेरी सोच स्पष्ट रूप से स्पष्ट करना था, उदाहरण के लिए 'ए = 3 + दस्तावेज़ .forms [0] .elemens [0] .value' जैसी चीजें न करें, लेकिन 'ए = 3 + संख्या (दस्तावेज़ .forms [ 0] [0] .Value) .elemens '; ध्यान दें कि मैं ** ** नहीं हूं ** रैपर ऑब्जेक्ट्स ('नई संख्या() ',' नई स्ट्रिंग()', ...) – Christoph

+0

का उपयोग करने की सलाह देना आपको तब तक ऐसा करने की आवश्यकता नहीं है जब तक कि आप मान को शामिल न करें 'फू' जैसी स्ट्रिंग। जो किसी भी तरह से असफल हो जाएगा। – scunliffe

+0

@scunliffe: '3 + 'foo' === '3foo'', जबकि '3 + संख्या ('foo') === NaN' – Christoph

2

कोर प्रकारों के साथ दखल न करें। कभी भी Array.prototype पर कुछ छड़ी न करें - आप नहीं जानते कि यह और कौन कर रहा है, और ऐसी चीजें कैसे बातचीत कर सकती हैं।

केवल महत्वपूर्ण प्रकारों की जांच करें जब यह महत्वपूर्ण हो। बतख टाइपिंग एक अच्छी अवधारणा है।

मैं वैश्विक दायरे के प्रदूषण से बचने के लिए अज्ञात कार्यों का उपयोग करना चाहता हूं।

(function($) { 
    /* Lots of code */ 
})(jQuery); 
0

यह सामान्य रूप से सभी भाषाओं पर लागू होता है: खासकर जब आप jQuery के साथ एक बहुत काम करते हैं, के रूप में मुझे क्या करना है, यह वास्तव में सहायक इस तरह एक टेम्पलेट का उपयोग करने के

गहरी घोंसले से बचें, यह अस्वीकार्य है और पढ़ने के लिए बहुत मुश्किल है।कुछ तकनीकें हैं, उदाहरण के लिए लूप में आप if के अंदर सबकुछ लपेटने के बजाय break या continue अगली पुनरावृत्ति कर सकते हैं।

+0

जेएस में 3-4 स्तर? असंभव की तरह लगता है। कभी-कभी आपको कुछ लिखना शुरू करने से पहले 4 स्तर मिलते हैं। ऑब्जेक्ट.डेफिनप्रॉपर्टीज (...) को बंद करें (फ़ंक्शन() {...}()) पर रखें - जब आप अपना लेट लिखना शुरू करते हैं तो गेटटर कहें कि उसका शरीर पहले से ही स्तर 4 पर है। –

+0

@ SzymonWygnański मेरी त्रुटि को नोट करने के लिए धन्यवाद , वह संख्या बहुत कम थी – ajax333221

0

हमेशा jslint का उपयोग करें।

शुरुआत में यह थोड़ा निराशाजनक है लेकिन यह फायदेमंद है।

जेस्लिंट आपको बताएगा कि क्या आप "सर्वोत्तम प्रथाओं" में से एक या अधिक तोड़ते हैं।

भी जेएसलिंट का समर्थन करने वाले आईडीई का उपयोग करने पर विचार करें। मैं वेबस्टॉर्म या सब्लिमे टेक्स्ट 2 की सिफारिश कर सकता हूं (इन 2 मैंने स्वयं का परीक्षण किया है और वे बहुत अच्छी तरह से jslint का समर्थन करते हैं)।

+0

मुझे जेशिंट अधिक व्यावहारिक और बड़ी टीमों के लिए कम राय मिली –

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