2011-02-05 15 views
34

मुझे जावास्क्रिप्ट में लेबल एस का उपयोग करने के बारे में पता चला है, जैसे कि:जावास्क्रिप्ट खराब अभ्यास में लेबल का उपयोग कर रहा है?

for (var i in team) { 
    if(i === "something") { 
     break doThis: //Goto the label 
    } else { 
     doThat(); 
    } 
} 

doThis: //Label 
doIt(); 

मैंने अभी तक इसके बारे में नहीं सुना है और मुझे इसके बारे में अधिक जानकारी नहीं मिल रही है और मुझे वहां सोचना शुरू हो रहा है इसके लिए एक कारण है।

ऐसा लगता है कि यह अन्य भाषाओं में GOTO कथन के समान है और इसे खराब अभ्यास माना जाएगा। क्या मैं इसे मानने में सही होगा?

+5

लेबल के आपके उपयोग गलत है: यदि आप अपने पाशन निर्माण करने के लिए लेबल जोड़ने के लिए यानी 'doThis की जरूरत है: के लिए (...' – Christoph

+5

इसके अलावा ** का उपयोग नहीं कर ** ' हैऑनप्रोपर्टी 'निश्चित रूप से खराब अभ्यास है। देखें: http://bonsaiden.github.com/JavaScript-Garden/#hasownproperty –

+1

@IvoWetzel अगर यह ऐसी वस्तु है जो उत्तराधिकारी नहीं है, तो 'हैऑनप्रॉपर्टी' का उपयोग न करना ठीक है। 'ऑब्जेक्ट' प्रोटोटाइप पर कुछ भी गणनीय नहीं है। – ZachB

उत्तर

21

वे लूप ब्रेकर पहचानकर्ता हैं। वे उपयोगी हैं यदि आपके पास नेस्टेड लूप (लूप के अंदर लूप) हैं और इन पहचानकर्ताओं का उपयोग करके, आप सशर्त रूप से निर्दिष्ट कर सकते हैं कि कब और किस लूप को तोड़ना है।

+0

आह, तो क्या आप ऐसे कोड में नहीं टूट सकते हैं जो लूप के अंदर नहीं है? – Ryan

+1

@Ryan: आपको उस कोड से बाहर निकलने की आवश्यकता नहीं है जो लूप के अंदर नहीं है। आप मुझे लगता है कि 'जाओ' जैसा कुछ उपयोग करना चाहते हैं। आप इसके बजाय 'if' का उपयोग कर स्थितियां डाल सकते हैं। – Sarfraz

+0

'यदि आपके पास नेस्टेड लूप हैं, या लूप के अंदर' स्विच 'कथन है, तो वे उपयोगी हैं, जो नियंत्रण के लिए' ब्रेक 'कीवर्ड का भी उपयोग करते हैं। – amn

41

जावास्क्रिप्ट में लेबल मुख्य रूप से ब्रेक के साथ उपयोग किया जाता है, या नेस्टेड छोरों में जारी बाहरी तोड़ने, या भीतरी लूप के अंदर कोड से बाहरी पाश जारी रखने के लिए सक्षम होने के लिए:

outer: 
    for (let i = 0; i < 10; i++) 
    { 
     let k = 5; 
     for (let j = 0; j < 10; j++) // inner loop 
      if (j > 5) 
       break; // inner 
      else 
       continue outer; // it will go to next iteration of outer loop 
    } 

यदि आप इस्तेमाल किया जारी रखने के लिए 'बाहरी' लेबल के बिना, यह आंतरिक लूप के अगले पुनरावृत्ति पर जायेगा। यही कारण है कि जावास्क्रिप्ट में लेबल की आवश्यकता है।

+3

बस सोच रहा है .... उपरोक्त कोड में परिवर्तनीय 'के' क्या करता है ?? – Danield

+1

बीटीडब्ल्यू, चलो एक ecmascript 6/ecmascript 2015 कीवर्ड है। https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/let –

+0

@ डैनिल्ड कुछ भी नहीं। – Walf

10

बचें का उपयोग कर लेबल

लेबल बहुत सामान्य जावास्क्रिप्ट में इस्तेमाल नहीं कर रहे हैं क्योंकि वे कार्यक्रमों कठिन बना पढ़ने और समझने में। जितना संभव हो सके, लेबल का उपयोग करके से बचें और, मामलों के आधार पर, कॉलिंग फ़ंक्शन या त्रुटि को फेंकना पसंद करते हैं।

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label

+12

वह टेक्स्ट [हटाया गया था] [https://developer.mozilla.org/en-US/docs/वेब/जावास्क्रिप्ट/संदर्भ/विवरण/लेबल $ तुलना करें? लोकेल = एन-यूएस और से = 805661 और = 78428 9) मई 2015 में एमडीएन से, [इन टिप्पणियों] के साथ (https://developer.mozilla.org/en-US/docs/वेब/जावास्क्रिप्ट/संदर्भ/विवरण/लेबल $ इतिहास) संशोधन इतिहास में: * "स्पष्ट सबूत द्वारा समर्थित अनुशंसा को हटाया नहीं जा रहा है।" "तकनीकी समीक्षा साफ़ करना। मुझे लगता है कि यह सच है कि बड़े लाल बैनर की कोई ज़रूरत नहीं है जो लेबल को हतोत्साहित करती है। हैवेन्ट को कुछ भी मिलता है जो अलग-अलग कहता है।" * – TachyonVortex

+0

अपडेट के लिए धन्यवाद! –

+1

क्या यह सही लेबल है और गोटो हटा दिया जाएगा http://es5.github.io/#x12.12 –

0

लेबल टूटता बाहर के कोड के किसी भी ब्लॉक न सिर्फ लूप

<p id="test1"></p> 
<p id="test2"></p> 
<p id="test3"></p> 
<p id="test4"></p> 
<p id="test5"></p> 

test: {        
    document.getElementById('test1').innerHTML = "test 1 passed"; 
    document.getElementById('test2').innerHTML = "test 2 passed"; 
    document.getElementById('test3').innerHTML = "test 3 passed"; 
    break test; 
    document.getElementById('test4').innerHTML = "test 4 passed"; 
    document.getElementById('test5').innerHTML = "test 5 passed"; 
} 

परिणाम तोड़ सकते हैं:

परीक्षण 1 पारित कर दिया

टी स्था 2 पारित कर दिया

परीक्षण 3 पारित कर दिया

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