में मेरी JSFiddle , मैं बस तत्वों की एक सरणी से पुनरावृति करने की कोशिश कर रहा हूँ। सरणी गैर-रिक्त है, जैसा कि लॉग स्टेटमेंट सिद्ध होता है। फिर भी forEachमुझे कॉल करने के लिए (इतना उपयोगी नहीं) "अनक्रेडेड TypeError: undefinedएक फ़ंक्शन नहीं है" त्रुटि।
मैं कुछ बेवकूफ कर रहा होगा; मैं क्या गलत कर रहा हूं?
मेरा कोड:
var arr = document.getElementsByClassName('myClass');
console.log(arr);
console.log(arr[0]);
arr.forEach(function(v, i, a) {
console.log(v);
});
.myClass {
background-color: #FF0000;
}
<div class="myClass">Hello</div>
[1,2,3].forEach(function(v,i,a) { console.log(v); });ठीक है। मेरे उदाहरण में इस और सरणी के बीच क्या अंतर है?
arr instanceof Arrayपरिणामस्वरूप falseयह Arrayऑब्जेक्ट के किसी भी प्रोटोटाइप तरीके का लाभ नहीं उठा सकता है जैसे कि Array.prototype.forEach () । arrएक HTMLCollection और ऑब्जेक्ट की तरह एक सरणी है (लेकिन इसे या तात्कालिकता से विरासत में नहीं मिलता है Array)। इसलिए आपका स्टैण्डर्ड forलूप काम करेगा क्योंकि यह ऑब्जेक्ट के इंडेक्स के माध्यम से पुनरावृत्त करता है और इसका प्रोटोटाइप नहीं है Array।
arrएक सरणी नहीं है, लेकिन एHTMLCollection। यह एक सरणी के रूप में एक ही तरीके नहीं है। developer.mozilla.org/en-US/docs/Web/API/… । यहां इसके बारे में एक SO पोस्ट यहां तक कि है: stackoverflow.com/questions/13433799/…