for
लूप और forEach
विधि के बीच सबसे महत्वपूर्ण अंतर यह है कि, पूर्व के साथ, आप break
लूप से बाहर हो सकते हैं। आप continue
केवल पास किए गए फ़ंक्शन से लौटकर अनुकरण कर सकते हैं forEach
, लेकिन पूरी तरह से बंद करने का कोई तरीका नहीं है।
इसके अलावा, दोनों प्रभावी रूप से एक ही कार्यक्षमता को पूरा करते हैं। एक अन्य मामूली अंतर में लूप के लिए सूचकांक (और सभी युक्त चर) का दायरा शामिल है, चर के कारण।
for (var i = 0; i < arr.length; i++) { ... }
arr.forEach(function (el, i) { ... });
हालाँकि, मुझे लगता है कि forEach
यह बहुत अधिक अभिव्यंजक है - यह एक सरणी के प्रत्येक तत्व के माध्यम से पुनरावृति करने के आपके इरादे का प्रतिनिधित्व करता है, और यह आपको केवल सूचकांक नहीं, बल्कि तत्व का संदर्भ प्रदान करता है। कुल मिलाकर, यह ज्यादातर व्यक्तिगत स्वाद के लिए नीचे आता है, लेकिन यदि आप उपयोग कर सकते हैं forEach
, तो मैं इसका उपयोग करने की सलाह दूंगा।
विशेष रूप से प्रदर्शन के बारे में, दोनों संस्करणों के बीच कुछ और पर्याप्त अंतर हैं। वास्तव में, लूप के लिए सरल forEach
विधि की तुलना में काफी बेहतर प्रदर्शन करता है , जैसा कि इस जेस्पर टेस्ट द्वारा प्रदर्शित किया जाता है ।
यह तय करना आपके लिए आवश्यक है कि आपके लिए ऐसा प्रदर्शन आवश्यक है या नहीं, और ज्यादातर मामलों में, मैं गति पर अभिव्यक्तता का पक्ष लूंगा। इस गति का अंतर मूल लूप और विधि के बीच मामूली सिमेंटिक अंतर के कारण होने की संभावना है, जब विरल सरणियों पर काम करते हैं, जैसा कि इस उत्तर में दिया गया है ।
यदि आपको इसके व्यवहार की आवश्यकता नहीं है forEach
और / या आपको लूप से जल्दी बाहर निकलने की आवश्यकता है, तो आप लो-डैश के _.each
विकल्प के रूप में उपयोग कर सकते हैं , जो क्रॉस-ब्राउज़र पर भी काम करेगा। यदि आप jQuery का उपयोग कर रहे हैं, तो यह एक समान भी प्रदान करता है $.each
, बस प्रत्येक भिन्नता में कॉलबैक फ़ंक्शन को दिए गए तर्कों में अंतर पर ध्यान दें।
( forEach
पॉलीफ़िल के रूप में, यह समस्याओं के बिना पुराने ब्राउज़रों में काम करना चाहिए, यदि आप उस मार्ग पर जाना चुनते हैं।)
break
बाहर होना संभव नहीं हैforEach
। लेकिन एक बड़ा फायदा यह है कि फंक्शन के साथ एक नया स्कोप बनाया जाता है। पॉलीफ़िल के साथ आपको कोई समस्या नहीं होनी चाहिए (कम से कम मैंने किसी का सामना नहीं किया है)।