2009-12-11 11 views
6

यह जावास्क्रिप्ट तर्क मुझे पहेली करता है। मैं एक सरणी बना रहा हूं और इसके पहले तत्व को एक संख्या में स्थापित कर रहा हूं। जब मैं "for" लूप का उपयोग करके इसके माध्यम से इंटरैक्ट करता हूं जावास्क्रिप्ट सरणी कुंजी को एक स्ट्रिंग में बदल देता है। क्यूं कर? मैं इसे एक संख्या में रहना चाहता हूं।जावास्क्रिप्ट पुनरावृत्ति करते समय तारों में सरणी अनुक्रमणिका को क्यों बदलता है?

stuff = []; 
stuff[0] = 3; 

for(var x in stuff) { 
    alert(typeof x); 
} 

उत्तर

10

यह है क्योंकि आप सरणी for...in जो आम तौर पर वस्तुओं के गुणों से अधिक पाशन के लिए प्रयोग किया जाता है का उपयोग कर के माध्यम से पाशन कर रहे हैं। जावास्क्रिप्ट इंजन शायद स्ट्रिंग पर कास्टिंग कर रहा है क्योंकि स्ट्रिंग प्रकार ऑब्जेक्ट गुणों के नाम के लिए उपयुक्त है।

इस अधिक परंपरागत दृष्टिकोण का प्रयास करें:

stuff = []; 
stuff[0] = 3; 

for(var i=0; i<stuff.length; i++) { 
    var x = stuff[i]; 
    alert(typeof x); 
} 
+1

त्वरित मदद असफ़ के लिए धन्यवाद! –

+0

@Mike Cantelon: कोई बात नहीं :) – Asaph

+1

@Mike, इस जवाब को स्वीकार करने के चेक मार्क क्लिक करें। –

5

for..in सरणी से अधिक पुनरावृति करने के लिए नहीं बनाया गया है। इसके बजाय लूप के लिए सी-शैली का उपयोग करें।

संदर्भ: MDC

4

गुण वस्तु के के माध्यम से जावास्क्रिप्ट दोहराता में for .. in पाश। जावास्क्रिप्ट में, संपत्ति के नाम तार होते हैं और सरणी केवल गुणों के समूह के साथ ऑब्जेक्ट होते हैं जो संख्याओं की तरह दिखते हैं।

3

for...in बयान, अधिक वस्तु गुण पुनरावृत्ति करने के लिए इस्तेमाल किया जाना चाहिए सारणी, एक सरल for पाश का उपयोग के लिए:

var stuff = []; 
stuff.push(3); 

for(var i = 0; i < stuff.length; i++) { 
    alert(stuff[i]); 
} 

सरणियों के साथ for...in का प्रयोग क्यों नहीं करना चाहिए?

  1. यह प्रोटोटाइप श्रृंखला को क्रॉल करता है, यह Array.prototype या Object.prototype में परिभाषित गुण से अधिक पुनरावृति होगी।
  2. पुनरावृत्ति का क्रम किसी भी तरह की गारंटी नहीं है। एक हाल ही में दिए सवाल पर

अधिक विवरण:

0

समस्या यह है कि साहचर्य सरणियों, जो वास्तव में कर रहे हैं करने के लिए स्विच करने के लिए जावास्क्रिप्ट में बहुत आसान है है नहीं सरणियों लेकिन वस्तुओं। for..in पाश हालांकि वस्तुओं पर काम करता है, जो सूचकांक तार हैं।

2

performance-critical फ़ंक्शंस में इन-इन से बचें।

  • The for-in loop requires the script engine to build a list of all the enumerable properties, और इससे पहले कि यह गणना शुरू कर सकते हैं कि सूची में डुप्लिकेट की जांच,।
  • The for-in loop breaks when you extend Array object using prototype
संबंधित मुद्दे

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