Toutes ces réponses suggère que vous vérifiez pour voir (d'une manière ou d'une autre) si un objet est une instance de la classe « Array » (qui est, construit par « Array ») ne sont pas vraiment des solutions sûres. Ils fonctionneront parfois, peut-être la plupart du temps, mais tous les principaux cadres se sont éloignés de cette approche. L'un des principaux problèmes réside dans l'interaction entre plusieurs fenêtres (généralement une fenêtre parent et une ou plusieurs fenêtres frame ou iframe). Si vous transmettez un objet tableau créé dans une fenêtre dans une API résidant dans une autre fenêtre, tous ces tests échoueront. Pourquoi? Parce que ce que vous testez est de savoir si un objet est une instance de la classe "Array" dans votre contexte de fenêtre locale. En d'autres termes, lorsque vous faites référence à « Array » dans
if (myobject instanceof Array) { ... }
ce que vous faites référence est window.Array
, bien sûr. Eh bien, un tableau construit en une autre fenêtre est et non va être une instance de la classe Array dans votre fenêtre!
La vérification du nom du constructeur est probablement un peu plus sûr, même si c'est toujours risqué. À mon avis, il vaut mieux adopter une approche de typage du canard. C'est, au lieu de demander, "Est-ce un tableau?" demander à la place, "cet objet semble-t-il supporter un ensemble particulier d'API Array dont j'ai besoin dans cette circonstance?" Par exemple, "cet objet a-t-il une propriété length
?" Javascript est une jolie langue "douce", et à peu près tout est modifiable. Ainsi, même si vous découvrez que quelque chose a été construit par "Array", vous ne savez toujours pas avec certitude ce que vous pouvez faire avec ou à ce sujet.
[modifier] Merci pour ce lien, @Lachlan - voici une description très claire des questions: http://juhukinners.com/2009/01/11/typeof-considered-useless-or-how-to-write-robust-type-checks/
dupliquer: http://stackoverflow.com/questions/1202841/what-is-the-best-way-to-check-if-an-object-is-an-array- ou-not-in-javascript –