Все три метода могут использоваться для проверки, является ли переменная типа Array. Однако есть некоторые нюансы. Я начну с последнего на первое.
Способ №3. Не будет работать, если переменная, о которой идет речь, была получена из другого winndow/frame. В этом случае конструктор укажет другой объект Array
, и эта проверка вернет false
. По этой же причине arr instanceof Array
не является пуленепробиваемым. Таким образом, он не на 100% надежный.
Способ № 2. Это метод, который традиционно используется для проверки типа массива. Фактически, Array.isArray
polyfill основан на этом методе. Единственный недостаток заключается в том, что он громоздкий и многословный.
Способ №1. Является ли это одним из ES5, который, наконец, должен использоваться для проверки типа массива, независимо от того, из какого массива realm (например, iframe). Это лучший в списке.
Мне кажется очевидным, что лучший способ - использовать функцию, созданную именно для этой цели, а именно «Array.isArray». Я не вижу, как любой из других способов может быть лучше, но, может быть, кто-то может доказать мне, что я ошибаюсь. –
FWIW, все они корректно выдают 'false' на специальный объект' arguments', определенный внутри функции. – Paul
Или буквальный дубликат: [Что лучший способ узнать, является ли объект массивом] (http://stackoverflow.com/q/7447425/1048572) – Bergi