Alle diese Antworten, die darauf hindeuten, dass Sie überprüfen (auf die eine oder andere Weise), ob ein Objekt eine Instanz der "Array" -Klasse ist (dh von "Array" konstruiert), sind wirklich nicht sichere Lösungen. Sie werden manchmal arbeiten, vielleicht die meiste Zeit, aber alle wichtigen Frameworks haben sich von diesem Ansatz entfernt. Eines der Hauptprobleme mit ihm kommt, wenn es gibt Interaktion zwischen mehreren Fenstern (im Allgemeinen, ein übergeordnetes Fenster und einem oder mehr Rahmen oder iframe Windows). Wenn Sie ein Array-Objekt, das in einem Fenster erstellt wurde, an eine API weitergeben, die sich in einem anderen Fenster befindet, schlagen alle diese Tests fehl. Warum? Denn das, was Sie testen, ob ein Objekt eine Instanz der „Array“ Klasse ist in Ihrem lokalen Fenster Kontext. Mit anderen Worten, wenn Sie "Array" in
if (myobject instanceof Array) { ... }
verweisen, was Sie Referenzierung ist window.Array
, natürlich. Nun, ein Array aufgebaut in ein weiteres Fenster ist nicht geht eine Instanz der Array-Klasse in Ihrem Fenster sein!
den Konstruktor Name Checking ist wahrscheinlich ein wenig sicherer, obwohl es immer noch riskant ist. Meiner Meinung nach ist es besser, wenn Sie einen Tipp tippen. Das heißt, anstatt zu fragen: "Ist das ein Array?" fragen Sie stattdessen, "scheint dieses Objekt bestimmte bestimmte Array-APIs zu unterstützen, die ich unter diesen Umständen brauche?" Zum Beispiel: "Besitzt dieses Objekt eine length
Eigenschaft?" Javascript ist eine ziemlich "weiche" Sprache und alles ist veränderbar. So, auch wenn Sie etwas herausfinden, tun wurde durch „Array“ konstruiert, Sie noch weiß wirklich nicht sicher, was Sie damit machen können oder zu ihm.
[Bearbeiten] Danke für den Link, @Lachlan - hier ist eine sehr klare Beschreibung der Themen: http://juhukinners.com/2009/01/11/typeof-considered-useless-or-how-to-write-robust-type-checks/
duplizieren: http://stackoverflow.com/questions/1202841/what-ist-best-way-to-check-if-an-object-is-anarray- or-not-in-javascript –