2009-03-11 8 views
6

जावास्क्रिप्ट में for..in और प्रत्येक..in कथन के लिए क्या अंतर है? क्या सूक्ष्म अंतर है जो मुझे नहीं पता या यह वही है और प्रत्येक ब्राउज़र के लिए इसका अलग नाम है?जावास्क्रिप्ट में for..in और प्रत्येक..in के बीच क्या अंतर है?

+0

इसे अस्वीकार कर दिया गया है [जावास्क्रिप्ट में 'के लिए' और 'के लिए' के ​​बीच क्या अंतर है?] (Http://stackoverflow.com/q/29285897/1048572) – Bergi

उत्तर

12

"प्रत्येक के लिए ... में" दोहराता पर एक निर्दिष्ट चर सभी मूल्यों निर्दिष्ट ऑब्जेक्ट के गुणों की

उदाहरण:

var sum = 0; 
var obj = {prop1: 5, prop2: 13, prop3: 8}; 
for each (var item in obj) { 
    sum += item; 
} 
print(sum); // prints "26", which is 5+13+8 

Source

"के लिए ... में" दोहराता मनमाना क्रम में पर एक निर्दिष्ट चर सभी गुण एक वस्तु का,।

उदाहरण:

function show_props(obj, objName) { 
    var result = ""; 
    for (var i in obj) { 
     result += objName + "." + i + " = " + obj[i] + "\n"; 
    } 
    return result; 
} 

Source


नोट ०३.२,०१३, for each... in छोरों deprecated हैं। एमडीएन द्वारा अनुशंसित 'नया' वाक्यविन्यास for... of है।

+0

क्या यह ब्राउज़र विशिष्ट है? –

+0

@ विजय: हाँ - इसे जावास्क्रिप्ट 1.6 में पेश किया गया था, यानी मोज़िला एक्सटेंशन – Christoph

2

उत्कृष्ट एमडीसी दस्तावेज पढ़ें।

first संग्रह पर सामान्य लूपिंग और किसी वस्तु के गुणों पर मनमाने ढंग से है।

ए ... लूप में अंतर्निहित गुणों पर पुनरावृत्ति नहीं होता है। इनमें ऑब्जेक्ट्स की सभी अंतर्निहित विधियां शामिल हैं, जैसे स्ट्रिंग की इंडेक्सऑफ विधि या ऑब्जेक्ट की टूस्ट्रिंग विधि। हालांकि, लूप सभी उपयोगकर्ता परिभाषित गुणों (फिर किसी भी अंतर्निहित गुणों को ओवरराइट करने सहित) पर पुन: सक्रिय होगा।

ए ... लूप में किसी ऑब्जेक्ट के गुणों को मनमाने ढंग से क्रम में पुनरावृत्त करता है। यदि एक संपत्ति को एक पुनरावृत्ति में संशोधित किया गया है और फिर बाद में देखा गया है, तो लूप द्वारा उजागर मूल्य उस समय के बाद उसका मूल्य होगा। एक संपत्ति जो इससे पहले कि यह दौरा किया गया है हटा दिया जाता है तो बाद में दौरा नहीं किया जाएगा। ऑब्जेक्ट में जोड़े गए गुण जिन पर पुनरावृत्ति हो रही है या तो पुनरावृत्ति से या तो छोड़ा जा सकता है। सामान्य तौर पर यह यात्रा के दौरान वस्तु, संपत्ति वर्तमान में दौरा किया जा रहा है के अलावा अन्य से, जोड़ नहीं करने के लिए, संशोधित करने या हटाने के गुण सबसे अच्छा है, कोई गारंटी नहीं है या नहीं, एक अतिरिक्त संपत्ति, का दौरा किया हो जाएगा एक संशोधित संपत्ति पहले या बाद में यह संशोधित किया गया है का दौरा किया होगा या नहीं, या क्या किसी हटाए गए संपत्ति से पहले ही हटा दिया जाता है का दौरा किया जा जाएगा।

latter आपको ऑब्जेक्ट की गुणों पर लूप करने की अनुमति देता है।

ऑब्जेक्ट की गुणों के सभी मानों पर निर्दिष्ट चर को इटरेट करता है। प्रत्येक विशिष्ट संपत्ति के लिए, एक निर्दिष्ट कथन निष्पादित किया जाता है।

7

इस प्रदर्शन उम्मीद है कि अंतर दर्शाने चाहिए।

var myObj = { 
    a : 'A', 
    b : 'B', 
    c : 'C' 
}; 
for each (x in myObj) { 
    alert(x);  // "A", "B", "C" 
} 
for (x in myObj) { 
    alert(x);  // "a", "b", "c" 
    alert(myObj[x]); // "A", "B", "C" 
} 
2

अन्य उत्तर के अलावा, यह ध्यान रखें कि for each...in ECMA मानक का हिस्सा नहीं है और यह भी upcoming edition 3.1 में शामिल नहीं है। यह जावास्क्रिप्ट 1.6 में पेश किया गया था, जो मोज़िला फाउंडेशन द्वारा extension of ECMAScript3 है।

लिंक किए गए विकिपीडिया पृष्ठ के अनुसार, यह केवल फ़ायरफ़ॉक्स 1.5+ और सफारी 3.x (+?) में लागू किया गया है।

+0

दूसरे शब्दों में, यह "केवल फ़ायरफ़ॉक्स" है। –

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