2010-05-28 9 views

Odpowiedz

9

Najlepszym sposobem:

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

ECMAScript 5th Edition Specification definiuje sposób, że i some browsers, jak Firefox, Chrome 3.7alpha 5 wersji beta i najnowsze kompilacje WebKit Nightly zapewniają już natywną implementację, więc możesz ją zaimplementować, jeśli nie jest dostępna:

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

jeszcze bezpieczniejsze jest 'return Object.prototype.toString.call (obj) === '[object array]';' aby uniknąć jakiegokolwiek możliwego przymusu – Rixius

+0

@Rixius: Cóż, metoda 'Object.prototype.toString' jest [w pełni opisane] (http://bclary.com/2004/11/07/#a-15.2.4.2) w specyfikacji, wartość zwracana 'String' jest * gwarantowana *, nie widzę żadnej korzyści z używania ścisłego równa się operatorowi, gdy wiesz, że porównasz wartości dwóch ciągów znaków ... – CMS

+0

Ktoś mógł odciąć 'Object.prototype.toString' zawsze lepiej, niż być przykro. – Rixius

0

To co mam użyć:

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

Dzięki za odpowiedź, nie rozumiem, dlaczego x.constructor.toString(). IndexOf ("Array") zwraca 9, jeśli jego instancji tablicy? czy możesz mi powiedzieć? – Sudarshan

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

Można wziąć wziąć Prototype biblioteki definicji metody Object.isArray(), która go Test:

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

Prototyp nie używa już tej metody, zobacz [tutaj] (http://github.com/sstephenson/prototype/blob/1.6.1/src/lang/object.js#L191) jak to jest zaimplementowane w 1.6.1. – CMS

1

powinien być w stanie użyć operatora instanceof:

var testArray = []; 

if (testArray instanceof Array) 
    ... 
+1

Jedyną wadą 'instanceof' jest praca w środowisku DOM z wieloma ramkami, a obiekt tablicy z jedną ramką nie jest instancją konstruktora' Array' innej ramki. Więcej informacji można znaleźć w [tym artykule] (http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/). – CMS

1

jQuery rozwiązuje wiele z tego rodzaju problemów:

jQuery.isArray(obj)

Powiązane problemy