2011-08-19 17 views
6

ऐसा लगता है कि मुझे जावास्क्रिप्ट में in कीवर्ड का अर्थ समझ में नहीं आता है।"इन" कीवर्ड के साथ जावास्क्रिप्ट सरणी पर इटरेटिंग

इस कोड स्निपेट (http://jsfiddle.net/3LPZq/) पर एक नज़र डालें:

var x = [1,2] 
for(i in x){ 
    document.write(x[i]); 
} 

जब jsfiddle में चलाने के लिए, यह न केवल मान सरणी में निहित प्रिंट, लेकिन यह भी सरणी ऑब्जेक्ट के गुणों और विधियों के सभी।

जब मैं इस (http://jsfiddle.net/4abmt/) की तरह इसे बदल:

$(document).ready(function(){ 
var x = [1,2] 
for(i in x){ 
    document.write(x[i]); 
}}); 

यह केवल मान 1 और 2

इस क्यों होता है प्रिंट? क्या यह jQuery के कारण होता है या in कीवर्ड का व्यवहार इस बात पर निर्भर करता है कि दस्तावेज़ पूरी तरह से लोड हो गया है या नहीं?

+1

आपके पहले उदाहरण में आपके पास मूतुल्स को पुस्तकालय के रूप में चुना गया है (जो प्रोटोटाइप का विस्तार करने लगता है)। यदि आप कोई पुस्तकालय नहीं चुनते हैं, तो परिणाम यह है: http://jsfiddle.net/fkling/3LPZq/6/। लेकिन ध्यान दें कि सरणी पर फिर से चलाने के लिए 'इन ... इन' का उपयोग करना बुरा अभ्यास है। –

उत्तर

2

जेएसफ़ाइल द्वारा लोड की गई कुछ पुस्तकालयों में ऐरे का डिफ़ॉल्ट प्रोटोटाइप विस्तारित होता है, इस प्रकार यह अतिरिक्त कार्य दिखाता है। jQuery एरे प्रोटोटाइप का विस्तार नहीं करता है और इसलिए आपको कोई अतिरिक्त फ़ंक्शन नहीं दिखता है।

+0

धन्यवाद! वह मेरे प्रश्न का उत्तर देता है। –

3

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

केवल एक वस्तु की अपनी संपत्तियों को खोजने के लिए, obj.hasOwnProperty(prop) का उपयोग करें।

var x = [1,2]; 
for (var i in x) { 
    if (x.hasOwnProperty(i)) { 
     document.write(x[i]); 
    } 
} 

hasOwnProperty पर एमडीएन डॉक्स देखें।

+0

मुझे यह मिलता है, लेकिन फिर दूसरे उदाहरण में क्यों यह केवल 1 और 2 प्रिंट करता है और अन्य ऐरे गुणों में से कोई भी नहीं? –

+0

+1, निश्चित रूप से किसी ऑब्जेक्ट पर सही ढंग से पुन: प्रयास करने का तरीका। – Exelian

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