Книга: JavaScript. Подробное руководство, 6-е издание
7.10. Тип Array
7.10. Тип Array
На протяжении этой главы мы не раз имели возможность убедиться, что массивы являются объектами, обладающими особыми чертами поведения. Получая неизвестный объект, иногда бывает полезно проверить, является он массивом или нет. Сделать это в реализации ECMAScript 5 можно с помощью функции Array. isArray():
Array.isArray([]) // => true
Array.isArray({}) // => false
Однако до выхода стандарта ECMAScript 5 отличить массивы от других объектов было удивительно сложно. Оператор typeof
никак не помогает в этом: для массивов он возвращает строку "object" (и для всех других объектов, кроме функций). В простых случаях можно использовать оператор instanceof
:
[] instanceof Array // => true
({}) instanceof Array // => false
Проблема применения оператора instanceof
состоит в том, что в веб-броузерах может быть открыто несколько окон или фреймов. Каждое окно или фрейм имеет собственное окружение JavaScript, с собственным глобальным объектом. А каждый глобальный объект имеет собственное множество функций-конструкторов. Поэтому объект из одного фрейма никогда не будет определяться как экземпляр конструктора в другом фрейме. Даже при том, что путаница между фреймами возникает довольно редко, тем не менее этого вполне достаточно, чтобы считать оператор instanceof
ненадежным средством определения принадлежности к массивам.
Решение заключается в том, чтобы выполнить проверку атрибута class
(раздел 6.8.2) объекта. Для массивов этот атрибут всегда будет иметь значение «Array», благодаря чему в реализации ECMAScript 3 функцию isArray()
можно определить так:
var isArray = Function.isArray || function(o) {
return typeof о === "object" &&
Object.prototype.toString.call(o) === "[object Array]";
};
Фактически именно такая проверка атрибута class
выполняется в функции Array.isArray()
, определяемой стандартом ECMAScript 5. Прием определения класса объекта с помощью Object.prototype.toString()
был описан в разделе 6.8.2 и продемонстрирован в примере 6.4.
- 7.1. Создание массивов
- 7.2. Чтение и запись элементов массива
- 7.3. Разреженные массивы
- 7.4. Длина массива
- 7.5. Добавление и удаление элементов массива
- 7.6. Обход элементов массива
- 7.7. Многомерные массивы
- 7.8. Методы класса Array
- 7.9. Методы класса Array, определяемые стандартом ECMAScript 5
- 7.10. Тип Array
- 7.11. Объекты, подобные массивам
- 7.12. Строки как массивы
- Тип данных домена
- Подходящие типы элементов
- Ключевые слова, используемые для спецификации типа данных
- Класс Array
- Типы ARRAY и SQL
- Работа с типом ArrayList
- Типы данных для работы с датой и временем
- Большие целые типы
- Типы страниц и их использование
- 6.2. Типичные ошибки при проведении программ продвижения и варианты их устранения
- Тип данных BIGINT
- Использование CAST() с типами дата