जेएस में वस्तुओं की प्रकार की जाँच के माध्यम से किया जाता है 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'
कृपया ध्यान दें कि तार इस चेक को पास करेंगे, जिससे समस्याएं हो सकती हैं क्योंकि IE इंडेक्स द्वारा स्ट्रिंग के पात्रों तक पहुंच की अनुमति नहीं देता है। इसलिए, आप संभवतः पहले से भिन्न प्रकार वाली प्राथमिकताओं और होस्ट ऑब्जेक्ट्स को बाहर typeof obj !== 'undefined'करने के लिए बदलना चाहते हैं । यह अभी भी स्ट्रिंग ऑब्जेक्ट को पास होने देगा, जिसे मैन्युअल रूप से बाहर करना होगा।typeof obj === 'object''object'
ज्यादातर मामलों में, आप वास्तव में जानना चाहते हैं कि क्या आप संख्यात्मक सूचकांकों के माध्यम से वस्तु पर पुनरावृत्ति कर सकते हैं। इसलिए, यह जांचने के लिए एक अच्छा विचार हो सकता है कि क्या वस्तु के 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
ऑब्जेक्ट के लिए कास्ट एरे-जैसे प्राइमेटी (यानी स्ट्रिंग्स) के लिए सही तरीके से काम करने के लिए आवश्यक है।
यहाँ जेएस सरणियों के लिए मजबूत जाँच के लिए कोड है:
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;
}
}