1. typeof
Сначала мы могли бы подумать об использовании typeof для определения типа данных, но для базовых типов, таких как Function, String, Number, Undefined и т. д., typeof может определить их все. Например, код выглядит следующим образом:
Но для массивов или регулярных выражений использования typeof для их определения будет недостаточно, потому что когда мы определяем массив или регулярное выражение, возвращаемый тип будет объектом. Как показано в следующем коде:
2. Instanceof
Отсюда легко догадаться использовать instanceof для проверки, является ли объект экземпляром массива. Эта проверка возвращает логическое значение. Если это массив, она возвращает true; в противном случае — false. Давайте посмотрим на код выше, чтобы проверить, является ли он массивом:
Как видно выше, использование instanceof действительно позволяет определить, является ли он массивом.
3. Свойство constructor
В JavaScript у каждого объекта есть свойство constructor, которое ссылается на функцию-конструктор, инициализировавшую объект. Например, чтобы определить тип неизвестного объекта, мы можем написать метод следующим образом:
Как видно выше, вызывая метод isArray, мы также можем определить, является ли это массивом.
Теперь мы можем видеть, что для пунктов 2 и 3 использование метода instanceof и свойства constructor соответственно, по-видимому, позволяет определить, является ли это массивом. Однако есть исключения. Например, при использовании массива со страницы из другого фрейма (iframe) это не сработает, потому что в разных фреймах (iframe) созданные массивы не разделяют между собой свойство prototype. Следующий тест с кодом может это проверить~
Ни один из вышеперечисленных методов не может определить, является ли объект массивом; однако, если обратиться к ECMA262, можно увидеть, что метод Object.prototype.toString.call() может использоваться для определения того, является ли объект массивом. Код выглядит следующим образом: