2009-06-10 13 views
18

मान लीजिए मैं एक जावास्क्रिप्ट वस्तु जोपुनरावृत्ति आदेश

var letters = {q:0, t:0, o:0, b:0, y:0, n:0, u:0, m:0, p:0, 
       w:0, a:0, d:0, k:0, v:0, c:0, z:0, l:0, j:0, 
       i:0, e:0, g:0, s:0, x:0, r:0, h:0, f:0}; 

और आरंभ नहीं हो जाता तब मैं इस की चाबियाँ पर पुनरावृति करना चाहते हैं वस्तुओं है

for(var letter in letters) { 
    // code goes here 
} 

दोनों में फ़ायरफ़ॉक्स 3 और इंटरनेट एक्सप्लोरर 8 ऑब्जेक्ट्स ऑर्डर घोषणा में क्रमबद्ध होते हैं जिसमें वे ऑब्जेक्ट घोषणा (q, t, o, b, y, आदि) में सूचीबद्ध होते हैं।

क्या मैं इस पर भरोसा कर सकता हूं? मान लीजिए कि मैं पुनरावृत्ति से पहले किसी भी तरह से अपनी वस्तु को संशोधित नहीं करता हूं। क्या यह ईसीएमएस्क्रिप्ट मानक का हिस्सा है? क्या किसी को पता है कि कौन से ब्राउज़र घोषित आदेश में पुन: प्रयास करते हैं?

+3

डुप: http://stackoverflow.com/questions/919027/are-object-variables-in-javascript-enumerated-in-the-order-they-were-added और http://stackoverflow.com/questions/280713/तत्व-ऑर्डर-इन-लूप-इन-जावास्क्रिप्ट –

उत्तर

13

नहीं, यह, पर कम से कम not in Firefox भरोसा नहीं किया जा सकता है: के लिए ... एक मनमाना क्रम में एक वस्तु के गुणों से अधिक पाश दोहराता में

एक।

+2

वास्तव में, फ़ायरफ़ॉक्स में आप इस पर निर्भर कर सकते हैं, लेकिन क्रोम में नहीं; http://stackoverflow.com/questions/280713/elements-order-for-in-loop-in-javascript – doekman

+3

देखें, आपको किसी भी ब्राउज़र में पुनरुत्पादित आदेश पर निर्भर नहीं होना चाहिए। आदेश वर्तमान कार्यान्वयन द्वारा दिया जाता है लेकिन किसी भी समय बदल सकता है। मोज़िला द्वारा लिंक्ड दस्तावेज़ स्पष्ट रूप से आदेश को मनमाने ढंग से कॉल करता है। –

0

नहीं, आपको इस पर भरोसा नहीं करना चाहिए।

1

आदेश विनिर्देशों में "मनमानी" के रूप में परिभाषित किया गया है, इसलिए नहीं; आपको निश्चित क्रम पर भरोसा नहीं करना चाहिए।

2

फॉर-इन लूप में किसी ऑब्जेक्ट की प्रॉपर्टी को प्रोसेस करने के लिए एक विशेष ऑर्डर सुनिश्चित करने के लिए, आपको ऑब्जेक्ट के लिए सॉर्ट ऑर्डर या सूची विधि को परिभाषित करने की आवश्यकता होगी। यदि आप ऑब्जेक्ट बनाते समय सभी गुणों को परिभाषित करते हैं, तो संपत्ति नामों की एक सरणी होगी, लेकिन यदि आप गुण जोड़ या निकाल सकते हैं, तो एक विधि आवश्यक है।

यदि किसी कारण से प्रसंस्करण आदेश आवश्यक है, तो एक सरणी बेहतर हो सकती है।

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