2010-05-28 13 views
8

bir nesne bir Array olup olmadığını söylemek için 'doğru' yolu nedir?JavaScript yolu anlatmak için

fonksiyonu isArray (O) { ???

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

Ortamınız hakkında daha fazla bilgi vermek isteyebilirsiniz, ör .: saf javascript? Tarayıcıda mı çalışıyorsunuz? Prototip veya diğer kütüphaneler mevcut mu? cevap için –

cevap

9

iyi yolu:

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

ECMAScript 5th Edition Specification Firefox 3.7alpha, Chrome gibi some browsers bunun için bir yöntem tanımlar ve }

+0

daha da güvenlidir 'return Object.prototype.toString.call (obj) === '[object Array]';' olası bir çakışmayı önlemek için – Rixius

+0

@Rixius: Eh, 'Object.prototype.toString' yöntemi [tamamen tarif edilen] (http://bclary.com/2004/11/07/#a-15.2.4.2) spesifikasyonda, bir 'String' dönüş değeri * garantili *, katı kullanımdan herhangi bir fayda göremiyorum eşittir işleç, iki dizge değerlerini karşılaştırdığınızı bildiğiniz zaman ... – CMS

+0

Birisi, 'Object.prototype.toString' için her zaman daha güvenli olmak için her zaman daha iyiydi. Birisi yerleşik bir yöntem yerini ise – Rixius

0

Bu kullandığım budur 5 Beta ve en son WebKit Gecelik zaten bir yerli uygulama sağlamak yapýlar, bu nedenle mevcut değilse bunu uygulamaya isteyebilirsiniz:

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

teşekkürler, ben onun dizi örneği ise x.constructor.toString(). indexOf ("Dizi") 9 döndürür neden anlamıyorum? lütfen bana söyleyebilir misin? – Sudarshan

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

Sen bunu test yöntemi Object.isArray() ait Prototype kütüphane tanımını almak alabilir:

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

Prototype artık bu yöntemi kullanmıyor, bkz. [Burada] (http://github.com/sstephenson/prototype/blob/1.6.1/src/lang/object.js#L191) nasıl uygulandığı 1.6.1. – CMS

1

Sen instanceof operatörünü kullanmak mümkün olmalıdır:

var testArray = []; 

if (testArray instanceof Array) 
    ... 
+1

"Instanceof" in yalnızca olumsuz tarafı, çok çerçeveli bir DOM ortamında çalıştığınız zaman, bir dizi nesnesini oluşturan bir dizi, diğer çerçevenin "Array" yapıcısının örneği değildir. Daha fazla ayrıntı için [Bu makale] (http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/) bakınız. – CMS

1

jQuery çözer konularda bu tür bir sürü:

jQuery.isArray(obj)

İlgili konular