में मेरी 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/…