Дронов Владимир
Шрифт:
При этом будет создан новый, пятый по счету, элемент массива с индексом 4 и значением 9.
Можно даже сделать так:
someArray[7] = 9;
В этом случае будут созданы четыре новых элемента, и восьмой элемент получит значение 9. Пятый, шестой и седьмой останутся неопределенными (undefined).
Мы можем присвоить любому элементу массива другой массив (или, как говорят опытные программисты, создать вложенный массив):
someArray[2] = ["n1", "n2", "n3"];
После этого можно получить доступ к любому элементу вложенного массива, указав последовательно оба индекса: сначала — индекс во "внешнем" массиве, потом — индекс во вложенном:
str = someArray[2][1];
Переменная str получит в качестве значения строку, содержащуюся во втором элементе вложенного массива, — n2.
Ранее говорилось, что доступ к элементам массива выполняется по числовому индексу. Но JavaScript позволяет создавать и массивы, элементы которых имеют строковые индексы (ассоциативные массивы, или хэши).
Пример:
var hash;
hash["AUDIO"] = "t_audio.htm"; hash["IMG"] = "t_img.htm"; hash["TITLE"] = "t_title.htm";
JavaScript также позволяет нам создать массив, вообще не содержащий элементов (пустой массив). Для этого достаточно присвоить любой переменной "пустые" квадратные скобки:
var someArray;
someArray = [];
Разумеется, впоследствии мы можем и даже должны наполнить этот массив элементами:
someArray[0] = 1; someArray[1] = 2; someArray[2] = 3;
Массивы идеально подходят в тех случаях, когда нужно хранить в одном месте упорядоченный набор данных. Ведь массив фактически представляет собой одну переменную.
Ссылки
Осталось рассмотреть еще один момент, связанный с организацией доступа к данным. Это так называемые ссылки — своего рода указатели на массивы и экземпляры объектов (о них будет рассказано далее), хранящиеся в соответствующих им переменных.
Когда мы создаем массив, JavaScript выделяет под него область памяти и помещает в нее значения элементов этого массива. Но в переменную, которой мы присвоили вновь созданный массив, помещается не сама эта область памяти, а ссылка на нее. Если теперь обратиться к какому-либо элементу этого массива, JavaScript извлечет из переменной ссылку, по ней найдет нужную область памяти, вычислит местонахождение нужного элемента и вернет его значение.
Далее, если мы присвоим значение переменной массива другой переменной, будет выполнено присваивание именно ссылки. В результате получатся две переменные, ссылающиеся на одну область памяти, хранящую сам этот массив.
Рассмотрим такой пример:
var myArray = ["AUDIO", "IMG", "TITLE"];
var newArray = myArray;
Здесь создается массив myArray с тремя элементами и далее он присваивается переменной newArray (при этом данная переменная получает ссылку на массив). Если потом мы присвоим новое значение первому элементу массива myArray:
myArray[0] = "VIDEO";
и обратимся к нему через переменную newArray:
s = newArray[0];
то в переменной s окажется строка "VIDEO" — новое значение первого элемента этого массива. Фактически переменные myArray и newArray указывают на один и тот же массив.
ВНИМАНИЕ!
В дальнейшем для простоты мы будем считать, что в переменной хранится не ссылка на массив (экземпляр объекта), а сам массив (экземпляр объекта). Если нужно будет специально указать, что переменная хранит ссылку, мы так и укажем.
Переменная, хранящая ссылку на массив (и экземпляр объекта), содержит данные объектного типа. Это последний тип данных, поддерживаемый JavaScript, который мы здесь рассмотрим.
НА ЗАМЕТКУ
Ранее мы узнали, что можем присвоить функцию переменной. Так вот, фактически переменная, которой была присвоена функция, также хранит ссылку на нее.
Объекты
Итак, мы познакомились с типами данных, переменными, константами, операторами, простыми и сложными выражениями, функциями и массивами. Но это была, так сказать, присказка, а сказка будет впереди. Настала пора узнать о самых сложных структурах данных JavaScript — объектах.
Понятия объекта и экземпляра объекта
В начале этой главы мы познакомились с типами данных, определяющими саму природу данных и набор действий, которые можно выполнять с этими данными. Так, строковый тип определяет, что данные этого типа представляют собой строки — наборы символов, которые можно объединять и сравнивать с другими строками.
Это были так называемые простые типы данных. Сущность, относящаяся к такому типу, может хранить только одно значение.