2015-10-08 20 views
7

MDN https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/for...of में की,जावास्क्रिप्ट के लिए ... पाश

यह संपत्ति नाम पर While for...in दोहराता, संपत्ति मूल्यों से अधिक for...of दोहराता कहते हैं।

फिर, दूसरा for...of क्यों "हैलो" लॉग नहीं करता है?

let arr = [3, 5, 7]; 
arr.foo = "hello"; 

for (let i in arr) { 
    console.log(i); // logs "0", "1", "2", "foo" 
} 

for (let i of arr) { 
    console.log(i); // logs "3", "5", "7" 
} 
+4

सरणी पर इटरेशन (प्रत्येक के लिए, 'के लिए 'के लिए उपयोग) केवल शून्य और' लंबाई -1' के बीच अपनी गुणों (यहां तक ​​कि अपरिभाषित) को कवर करता है। 'for..in' अलग है और किसी भी चीज की समृद्ध गुणों पर पुनरावृत्ति करता है। – Touffy

+0

आपकी त्वरित प्रतिक्रिया के लिए बहुत बहुत धन्यवाद। अब, मुझे नहीं पता कि आपका जवाब कैसे स्वीकार किया जाए :-) –

+0

क्षमा करें, कुछ और अधिक विस्तृत लिखें, मुझे कुछ मिनट दें :) – Touffy

उत्तर

9

के लिए ... एक वस्तु, मनमाना क्रम में की गणनीय सम्पत्ति के ऊपर बयान दोहराता में।

अधिक सटीक होने के लिए, इसमें प्रोटोटाइप श्रृंखला में भी समेकित गुण शामिल हैं।

और प्रत्येक ऑब्जेक्ट का समान व्यवहार किया जाता है। यह आसान है, यह उलझन में है, जब बहुत से लोगों को एरे पर इस्तेमाल किया जाता है तो इससे नफरत होती है।

for..of आंतरिक रूप से एक प्रतीक का उपयोग करता है। [Symbol.iterator] के साथ किसी भी ऑब्जेक्ट को for..of पर पुनरावृत्त किया जा सकता है, लेकिन को फिर से कथन के अर्थशास्त्र के बजाय प्रतीक में परिभाषित किया गया है और प्रतीक में किस क्रम में परिभाषित किया गया है (आलसी iterators को अनुमति देता है जहां गुण प्रारंभ में ज्ञात नहीं हैं) ।

सरणी के मामले में, इटरेटर शून्य और सरणी के length-1 के बीच प्रत्येक संपत्ति के माध्यम से जाता है, यहां तक ​​कि उन गुणों को भी अपरिभाषित किया जाता है और for..in द्वारा नहीं उठाया जाएगा। लेकिन यह अन्य गुणों को पूरी तरह से अनदेखा करता है, वैसे ही ऐरे .toString() समय की शुरुआत के बाद से, और ऐरे .forEach() और ES5 से इसके मित्र। यह सरणी पुनरावृत्ति को सुसंगत बनाता है।

+0

आपके उत्तर के लिए बहुत बहुत धन्यवाद, मुझे उम्मीद है कि अन्य लोगों को एक ही समस्या का सामना करना पड़ा इससे फायदा हो सकता है :-) –

+0

वास्तव में यह दूसरा 'for..in सरणी' से संबंधित उत्तर है जिसे मैं आज लिखता हूं। Arrays संख्याबद्ध, आदेशित मूल्यों के लिए हैं। – Touffy

+0

यह सच है, arr.foo = "हैलो" को ऑब्जेक्ट में कुंजी-मूल्य जोड़ी के रूप में उपयोग किया जाना चाहिए –

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