Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УП Технология программирования.doc
Скачиваний:
20
Добавлен:
11.06.2015
Размер:
1.69 Mб
Скачать

Записи и их организация в памяти

Запись предназначена для фиксации информации о каком-то объекте путём перечисления набора его свойств. Чтобы не путаться с термином «объект», будем называть запись программным объектом, а объект, свойства которого в ней перечислены, – информационным объектом.

Литерал записи – это заключённый в фигурные скобки список пар свойство: выражение, разделённых запятыми Свойство указывается своим именем, а его значением в литерале становится значение указанного после двоеточия выражения. Вообще, значением свойства может быть любое значение (в том числе и undefined). Порядок свойств в литерале не существенен.

Пример: литерал

{num: "F12C75",

person: {family:"Иванов", name:"Иван"},

age: Age,

cats: ["Рыжик", "Толстый", "Жу-Жу"]}

изображает информационный объект «Член общества любителей кошек», значения и смысл свойств которого перечислены в таблице.

Свойство

Значение

Смысл

num

Строка F12C75

Регистрационный номер

person

Ссылка на запись, изображённую литералом

{family:"Иванов",name:"Иван"}

Фамилия и имя (удобно объединить их в одну запись)

age

Значение переменной Age. Если переменная не была определена ранее, то литерал неправильно написан.

Возраст лица

cats

Массив из трёх строк.

Список его котов

Как и у массивов, два одинаковых литерала описанного выше типа создают два разных программных объекта с одинаковыми свойствами и их значениями, но с разными адресами в памяти. Поэтому для каждого информационного объекта следует использовать только один литерал записи. На рис. 4 изображено представление записи в памяти.

Рис. 4. Представление записи в памяти.

Здесь, как и в массиве, дескриптор записи ссылается на массив свойств, содержащий имена свойств и ссылки на их значения (или сами значения). Это позволяет динамически добавлять новые свойства.

На рис. 5 изображено представление записи из приведённого выше примера.

Рис 5. Представление в памяти сложной записи.

Операции над различными типами данных

Как и в математике, в языках программирования используются операции, которые, будучи применены к значениям своих операндов, выдают определённое значение – результат. В программировании очень важно знать, для каких типов операндов применима данная операция и каков будет тип её результата. В JavaScript, если операция неприменима к данным значениям, она выдаёт undefined, или Infinity или NaN.

Рассмотрим следующие группы операций языка JavaScript:

  • арифметические,

  • строковые,

  • логические,

  • сравнения,

  • операции выборки.

В п. 11 будут рассмотрены операции присваивания.

Арифметические операции

Операция

Результат

Примеры

число1+число2

Суммачисел

число1число2

Разностьчисел

число1 *число2

Произведениечисел

число1/число2

Точное частноеот деления

5/3даст1.66…67

число1%число2

Остатокот деления целых чисел

5%3даст2

+число

То же число

-число

То же число, но с противоположным знаком

Операция сложения вычисляет сумму только тогда, когда значения операндов являются числами, или логическими значениями, или null (которые преобразуются в числа 1 или 0). В противном случае она исполняется, как конкатенация строк (если это возможно, см. ниже). Остальные арифметические операции значения операндов, не являющиеся числами, пытаются привести к числам по определённым правилам. Например, строка "123" и массивы [123] и ["123"] приводится к числу 123. Правила приведения очень сложны, поэтому лучше, по возможности, избегать подобных ситуаций.

При получении в результате слишком большого числа или при делении на 0 операции выдают значение Infinity (бесконечность). При делении 0 на 0 или при невозможности привести операнды к числам выдаётся значение NaN («не число»).