В JavaScript поддерживаются три составных типа данных: объекты, массивы и функции. В действительности массивы и функции также являются объектами. Другими словами, такие понятия, как массив и функция, реализованы в JavaScript в виде объектов.
Объект - понятие, обладающее настолько большой общностью, что противопоставляется исторически более раннему понятию "тип данных". Действительно, объект есть контейнер, содержащий переменные и функции, или только одну из этих категорий: он может содержать только переменные или только определения функций. В свою очередь, переменные внутри объекта могут содержать данные как примитивных, так и составных типов (в том числе и данные типа объект). Последнее обстоятельство как раз и позволяет конструировать сколь угодно сложные типы данных. Если исходить из более традиционного понятия "тип данных", то объект - это сложный (составной) тип данных. С другой стороны, поддержка как примитивных, так и сложно устроенных данных может быть обеспечена соответствующими объектами.
Исторически сложилось, что сначала появилось понятие типа данных (в смысле множества допустимых значений). Более того, в первых языках программирования это было множество однородных значений, например, только чисел, строк или логических величин. Нельзя было сформировать тип данных, состоящих одновременно, например, из чисел и строк (числа и строки - разнородные данные). Далее появились структуры в виде упорядоченного множества (последовательности) данных различных типов. Структура - это составной тип данных, если угодно прибегнуть к такой интерпретации. Наконец, было введено еще более общее понятие объекта, который мог содержать не только разнородные значения (как и структура), но еще и функции (называемые методами). Другими словами, объект может содержать не только пассивные данные (переменные), но и активные (функции).
Обратите внимание, что при разъяснении того, что такое объект, мы использовали понятие "тип данных". Но если мы усвоили понятие "объект", то его, как будто, можно рассматривать в качестве первичного по отношению к понятию "составной тип данных". Однако это можно сделать лишь с некоторой натяжкой. Понятия "тип данных" и "объект" не вполне эквивалентны. Многие типы данных реализуются и представляются в конкретных языках, в том числе и в JavaScript, посредством соответствующих объектов - программных конструкций особого рола. Например, массив реализован и представлен в JavaScript как некий объект под названием Array. Этот объект имеет ряд свойств, содержащих не только элементы представляемого им массива, но и другие важные вещи: количество всех элементов массива и методы работы с ним (например, сортировка элементов, объединение двух массивов). Однако объект - неупорядоченное множество его свойств, а массив - упорядоченное множество его элементов. Кроме того, операции над массивом являются чем-то внешним по отношению к самому массиву - упорядоченному набору данных.
По этим и некоторым другим причинам массивы выделяют в особый тип данных, отличающийся от объектов. Как бы то ни было, начинающие (и не только) могут относиться к массивам как к особому типу данных, то есть как к специальной конструкции, идея и польза которой очевидны. Позже мы уточним это понятие настолько, чтобы его можно было легко применять в программировании.
Аналогично, все, что связано с понятием функции, можно реализовать и представить в виде некоторого объекта. В JavaScript каждая функция реализуется посредством объекта Function. Такое представление обладает многими достоинствами, которые оказываются востребованными при составлении более или менее сложных программ. Однако любой программист может ограничиться традиционным пониманием функции как блока программного кода, который можно вызвать для исполнения по имени этой функции. В этом смысле функцию можно отнести к особому типу данных. Интерпретаторы, прежде чем начать выполнение кода, анализируют его в целом на присутствие в нем определений функций, так как код функций необходимо "усвоить" прежде, чем он будет вызван где-то и когда-то (до или после определения). В отличие от функций, другие операторы выполняются интерпретатором друг за другом в порядке их упоминания в исходном коде
Если все сказанное внесло некоторую сумятицу в сложившуюся у вас систему понятий, то не расстраивайтесь, со временем все станет на свои места. На первых порах вы можете пропустить как будто путаные общие рассуждения о типах и объектах, сосредоточившись пока на чем-то более понятном (например, на простом определении типа данных). Простейшие типы данных, как я уже говорил, - это примитивные данные, такие как числа, строки символов и двухэлементное множество, содержащее логические значения true и false. Необходимость в других типах данных обусловлена более сложными задачами их обработки.
В JavaScript имеется множество встроенных объектов, обеспечивающих работу с числами, строками, массивами, датами, функциями и т. п. Некоторые из этих объектов соответствуют, как говорят, типам данных. Например, для работы с массивами имеется объект Array, для манипулирования датами и временем - Date, а для выполнения более или менее сложных математических вычислений - Math. Перечень встроенных объектов приводится ниже:
- Array. Обеспечивает массив данных.
- Boolean. Объект, соответствующий логическому типу данных Boolean.
- Date. Обеспечивает работу с датами и временем.
- Error. Обеспечивает хранение информации об ошибках и возможность создания исключительных ситуаций.
- Function. Обеспечивает возможности, связанные с функциями, например, проверку количества переданных параметров.
- Global. Обеспечивает встроенные функции для преобразования и сравнения данных.
- Math. Обеспечивает множество математических функций и kohcтант. Применяется для выполнения более сложных вычислений, чем те, которые обеспечиваются арифметическими операторами.
- Number. Объект, соответствующий числовому типу данных.
- Object. Базовый объект, из которого получаются все остальные объекты, в том числе и пользовательские.
- RegExp. Обеспечивает сложные способы обработки строк на основе так называемых регулярных выражений.
- String. Объект, соответствующий строковому типу данных.
Комментарии к статье:
Добавить комментарий: