জেএস-তে বস্তুর প্রকারের চেকিং করা হয় instanceof
, অর্থাৎ মাধ্যমে
obj instanceof Array
প্রতিটি ফ্রেমের নিজস্ব Array
অবজেক্ট থাকায় অবজেক্টটি ফ্রেমের সীমানা পেরিয়ে গেলে এটি কাজ করবে না । আপনি বস্তুর অভ্যন্তরীণ [[শ্রেণি]] সম্পত্তিটি পরীক্ষা করে এটি ঘিরে কাজ করতে পারেন । এটি পেতে, ব্যবহার করুন Object.prototype.toString()
( এটি ECMA-262 দ্বারা কাজ করার গ্যারান্টিযুক্ত):
Object.prototype.toString.call(obj) === '[object Array]'
উভয় পদ্ধতিই কেবল আসল অ্যারেগুলির জন্য কাজ করবে এবং অ্যারে-জাতীয় বস্তু যেমন arguments
বস্তু বা নোড তালিকার মতো নয়। সমস্ত অ্যারের মতো অবজেক্টের একটি সংখ্যাসূচক length
সম্পত্তি থাকতে হবে, আমি এইগুলির জন্য এটি পরীক্ষা করে দেখি:
typeof obj !== 'undefined' && obj !== null && typeof obj.length === 'number'
দয়া করে নোট করুন যে স্ট্রিংগুলি এই চেকটি পাস করবে, যা সমস্যা দেখা দিতে পারে কারণ আইই সূচক অনুসারে স্ট্রিংয়ের অক্ষরগুলিতে অ্যাক্সেসের অনুমতি দেয় না। অতএব, আপনি পরিবর্তন করতে চাইতে পারেন typeof obj !== 'undefined'
করার typeof obj === 'object'
প্রিমিটিভের এবং থেকে স্বতন্ত্র ধরনের সঙ্গে হোস্ট বস্তু বাদ দেওয়ার'object'
alltogether। এটি স্ট্রিং অবজেক্টগুলিকে এখনও পাস হতে দেবে, যা ম্যানুয়ালি বাদ দিতে হবে।
বেশিরভাগ ক্ষেত্রে, আপনি যা জানতে চান তা হ'ল আপনি সংখ্যাসূচক সূচকের মাধ্যমে অবজেক্টটি পুনরুক্ত করতে পারবেন কিনা। সুতরাং, বস্তুর 0
পরিবর্তে এই নামে কোনও সম্পত্তি আছে কিনা তা যাচাই করা ভাল ধারণা হতে পারে , যা এই চেকগুলির মধ্যে একটির মাধ্যমে করা যেতে পারে:
typeof obj[0] !== 'undefined' // false negative for `obj[0] = undefined`
obj.hasOwnProperty('0') // exclude array-likes with inherited entries
'0' in Object(obj) // include array-likes with inherited entries
অ্যারে সদৃশ আদিম (যেমন স্ট্রিং) এর জন্য সঠিকভাবে কাজ করার জন্য কাস্ট টু অবজেক্টের প্রয়োজন।
জেএস অ্যারেগুলির জন্য দৃust় চেকগুলির কোড এখানে:
function isArray(obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
}
এবং পুনরাবৃত্তিযোগ্য (অর্থাত খালি নয়) অ্যারের মতো বস্তু:
function isNonEmptyArrayLike(obj) {
try { // don't bother with `typeof` - just access `length` and `catch`
return obj.length > 0 && '0' in Object(obj);
}
catch(e) {
return false;
}
}