একটি অগণনীয় সম্পত্তি হ'ল for..in
লুপগুলির মধ্যে অন্তর্ভুক্ত এবং পরিদর্শন করা যেতে পারে (বা বৈশিষ্ট্যের অনুরূপ পুনরাবৃত্তি, যেমন Object.keys()
)।
যদি কোনও সম্পত্তি অনুমিত হিসাবে চিহ্নিত না করা হয় তবে লুপটি এটিকে বিষয়টির মধ্যে থাকা উপেক্ষা করবে।
var obj = { key: 'val' };
console.log('toString' in obj); // true
console.log(typeof obj.toString); // "function"
for (var key in obj)
console.log(key); // "key"
একটি সম্পত্তি তার নিজস্ব [[Enumerable]]
গুণাবলী দ্বারা গণ্যযোগ্য বা না হিসাবে চিহ্নিত করা হয় । আপনি সম্পত্তির বর্ণনাকারীর অংশ হিসাবে এটি দেখতে পারেন :
var descriptor = Object.getOwnPropertyDescriptor({ bar: 1 }, 'bar');
console.log(descriptor.enumerable); // true
console.log(descriptor.value); // 1
console.log(descriptor);
// { value: 1, writable: true, enumerable: true, configurable: true }
একটি for..in
লুপ তারপরে বস্তুর সম্পত্তির নামগুলির মাধ্যমে পুনরাবৃত্তি করে।
var foo = { bar: 1, baz: 2};
for (var prop in foo)
console.log(prop); // outputs 'bar' and 'baz'
তবে, কেবলমাত্র তার বিবৃতি মূল্যায়ন করে - console.log(prop);
এই ক্ষেত্রে - সেই বৈশিষ্ট্যগুলির জন্য যাদের [[Enumerable]]
বৈশিষ্ট্যযুক্ত true
।
এই শর্তটি যথাযথভাবে রয়েছে কারণ অবজেক্টগুলির আরও অনেক সম্পত্তি রয়েছে , বিশেষত উত্তরাধিকার থেকে :
console.log(Object.getOwnPropertyNames(Object.prototype));
// ["constructor", "toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", /* etc. */]
এই বৈশিষ্ট্যগুলির প্রত্যেকটি এখনও অবজেক্টটিতে বিদ্যমান :
console.log('constructor' in foo); // true
console.log('toString' in foo); // true
// etc.
তবে, তারা for..in
লুপটি এড়িয়ে গেছে কারণ তারা অগণনীয় নয়।
var descriptor = Object.getOwnPropertyDescriptor(Object.prototype, 'constructor');
console.log(descriptor.enumerable); // false
for-in
পারছ কি করে?