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)
}
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)
}
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 }
daha da güvenlidir 'return Object.prototype.toString.call (obj) === '[object Array]';' olası bir çakışmayı önlemek için – Rixius
@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
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
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]';
};
}
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
function typeOf(obj) {
if (typeof(obj) == 'object')
if (obj.length)
return 'array';
else
return 'object';
} else
return typeof(obj);
}
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;
}
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
Sen instanceof
operatörünü kullanmak mümkün olmalıdır:
var testArray = [];
if (testArray instanceof Array)
...
"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
jQuery çözer konularda bu tür bir sürü:
jQuery.isArray(obj)
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 –