2010-05-28 10 views
8

यह कहने का 'सही' तरीका क्या है कि कोई वस्तु एक ऐरे है या नहीं?यह बताने के लिए जावास्क्रिप्ट तरीका है कि कोई ऑब्जेक्ट एक ऐरे है

फ़ंक्शन isArray (o) { ???

function is_array(obj) { 
    return (obj.constructor.toString().indexOf("Array") != -1) 
} 
+1

आप अपने पर्यावरण के बारे में अधिक जानकारी देना चाहते हैं, उदाहरण: शुद्ध जावास्क्रिप्ट? एक ब्राउज़र में चल रहा है? प्रोटोटाइप या अन्य पुस्तकालय उपलब्ध हैं? –

उत्तर

9

सबसे अच्छा तरीका है:

function isArray(obj) { 
    return Object.prototype.toString.call(obj) == '[object Array]'; 
} 

ECMAScript 5th Edition Specification कि के लिए एक विधि को परिभाषित करता है, और some browsers, फायरफॉक्स 3.7alpha, क्रोम की तरह }

+0

यहां तक ​​कि सुरक्षित है 'वापसी ऑब्जेक्ट .prototype.toString.call (obj) ===' [ऑब्जेक्ट ऐरे] '; किसी भी संभावित कोयर्सन से बचने के लिए – Rixius

+0

@Rixius: ठीक है,' ऑब्जेक्ट.प्रोटोटाइप.टोस्ट्रिंग 'विधि पूरी तरह से है वर्णित] (http://bclary.com/2004/11/07/#a-15.2.4.2) विनिर्देशन में, एक 'स्ट्रिंग' वापसी मान * गारंटीकृत * है, मुझे सख्त उपयोग करने का कोई लाभ नहीं दिख रहा है ऑपरेटर के बराबर होता है, जब आप जानते हैं कि आप दो स्ट्रिंग मानों की तुलना कर रहे हैं ... – CMS

+0

कोई भी 'ऑब्जेक्ट.प्रोटोटाइप.तोस्ट्रिंग' को माफ की तुलना में सुरक्षित होने के लिए हमेशा बेहतर बना सकता था। – Rixius

0

यह मैं क्या उपयोग है 5 बीटा, और नवीनतम वेबकिट नाइटली बिल्ड पहले ही एक मूल कार्यान्वयन प्रदान करता है, इसलिए यदि आप उपलब्ध नहीं हैं तो आप इसे कार्यान्वित करना चाहेंगे:

if (typeof Array.isArray != 'function') { 
    Array.isArray = function (obj) { 
    return Object.prototype.toString.call(obj) == '[object Array]'; 
    }; 
} 
+0

उत्तर के लिए धन्यवाद, मुझे समझ में नहीं आता क्यों x.constructor.toString()। IndexOf ("Array") 9 सरणी देता है यदि इसका सरणी उदाहरण है? क्या आप मुझे बता सकते हैं? – Sudarshan

0
function typeOf(obj) { 
    if (typeof(obj) == 'object') 
    if (obj.length) 
     return 'array'; 
    else 
     return 'object'; 
    } else 
    return typeof(obj); 
} 
0

आप ले विधि Object.isArray() जो परीक्षण के Prototype पुस्तकालय परिभाषा ले जा सकते हैं:

function(object) { 
    return object != null && typeof object == "object" && 
    'splice' in object && 'join' in object; 
} 
+1

प्रोटोटाइप अब उस विधि का उपयोग नहीं कर रहा है, [यहां] देखें (http://github.com/sstephenson/prototype/blob/1.6.1/src/lang/object.js#L191) यह 1.6.1 में कैसे कार्यान्वित किया गया है। – CMS

1

आप instanceof ऑपरेटर का उपयोग करने के लिए सक्षम होना चाहिए:

var testArray = []; 

if (testArray instanceof Array) 
    ... 
+1

'exampleof' का एकमात्र नकारात्मक पक्ष तब होता है जब आप बहु-फ्रेम DOM वातावरण में काम करते हैं, एक फ्रेम ऑब्जेक्ट फॉर्म एक फ्रेम अन्य फ्रेम के' ऐरे 'कन्स्ट्रक्टर का उदाहरण नहीं है। अधिक जानकारी के लिए [इस आलेख] देखें (http://perfectionkills.com/instanceof-cononsidered-harmful-or-how-to-write-a-robust-isarray/)। – CMS

1

jQuery हल करती है इस तरह के कई मुद्दों:

jQuery.isArray(obj)

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

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