Глава 3.4. Выражения и операцииВыражения в JavaScript, как и в других языках программирования, представляют собой комбинации переменных, констант и операций, дающие осмысленный результат. Этот результат может быть числом, текстовой строкой, логическим значением или объектом. Соответственно все выражения JavaScript подразделяются на арифметические, строковые, логические и объектные. Существует два типа выражений: те, которые присваивают значение некоторой переменной (например,
Все операции в JavaScript подразделяются на следующие:
3.4.1. Операции сравненияОперации сравнения сравнивают два операнда и возвращают логическое значение, означающее результат этого сравнения. Строки сравниваются в лексикографическом порядке в кодировке Unicode. Если типы операндов различны, то делается попытка преобразовать их к одному типу. При этом:
Примеры: var x = "3"; a = x == 3; // a равно true b = x === 3; // b равно false (разные типы) 3.4.2. Арифметические операцииАрифметические операции применяются к числовым операндам и возвращают числовое значение, означающее результат операции. Если типы операндов различны, то делается попытка преобразовать их к числовому типу. При этом:
Примеры: var i, j, k; i = 19 % 6.8; // i равно 5 k = 2; j = k++; // j равно 2, k равно 3 j = ++k; // j и k равны 4 3.4.3. Битовые операцииБитовые операции применяются к числовым операндам, представленным как двоичные числа (т. е. как цепочки из 32 битов), и возвращают числовое значение, означающее результат операции. Перед выполнением операции операнды преобразуются в целые числа, а результат операции преобразуется в Number. О проблемах, связанных с этими преобразованиями см. WDH+: Последний бит.
Примеры: var i, j, k; i = 15; j = 9; k = i & j; // k равно 9 (1111 & 1001 = 1001) k = i | j; // k равно 15 (1111 | 1001 = 1111) k = i ^ j; // k равно 6 (1111 ^ 1001 = 0110) i = -14; // двоичное значение 11111111 11111111 11111111 11110010 j = i >> 2; // j равно -4 (11111111 11111111 11111111 11111100) k = i >>> 2; // k равно 1073741820 (00111111 11111111 11111111 11111100) 3.4.4. Логические операцииЛогические операции применяются к логическим операндам и возвращают логическое значение, означающее результат операции. Если типы операндов различны, то делается попытка преобразовать их к логическому типу.
Примеры: var i, j, k; i = 3; j = 5; k = (i < 4) && (j > 4); // k равно true k = (i < 4) || (j > 5); // k равно true k = !k; // k равно false 3.4.5. Строковые операцииНа сегодняшний день JavaScript поддерживает единственную строковую операцию, а именно конкатенацию строк, которая обозначается символом "+". Если хотя бы один операнд является строкой, то результатом операции является слияние строк-операндов. Примеры: k = "Моя " + "строка"; // k равно "Моя строка" text = "Результат: " + 123; // text равно "Результат: 123" 3.4.6. Операции присваиванияОперации присваивания присваивают левому операнду результат операции, который определяется
правым операндом и самой операцией. Базовая операция присваивания имеет вид
Операция присваивания возвращает значение, которое равно значению, присвоенному левому операнду. Пример: i = j = k = 0; // все переменные получают значение 0 3.4.7. Прочие операции3.4.7.1. Условная операцияУсловная операция это единственная тернарная операция в JavaScript. Она имеет вид: test ? value1 : value2 где test любое логическое выражение, а value1 и value2 любые выражения. Если test истинно, то операция возвращает значение value1, в противном случае она возвращает значение value2. Пример: var status = (age >= 18) ? "взрослый" : "подросток"; 3.4.7.2. Операция запятаяОперация запятая вызывает последовательное вычисление значений двух выражений и возвращает второе из них. Она имеет вид: expr1,expr2 где expr1 и expr2 любые выражения. Основное применение эта операция находит в операторе цикла for, поскольку последний допускает только одно выражение, которое исполняется в конце каждого цикла. Операция запятая позволяет объединить два выражения в одно и, тем самым, обойти это ограничение. Пример: for (i = 0; i < 10; i++, j++) { k = i + j; } 3.4.7.3. Операция deleteОперация delete удаляет свойство объекта или элемент массива. Она имеет вид: delete expr где expr любое выражение, значением которого является свойство объекта или элемент массива. Если удаление прошло успешно, то операция возвращает значение true; если нет (например, если свойство объекта не может быть удалено), то она возвращает значение false. Эта операция может также применяться для удаления неявно декларированных переменных (т. е. тех, декларация которых не содержит ключевого слова var). При удалении элемента массива длина массива и нумерация его элементов не изменяются, но удаленный элемент становится неопределенным. Примеры: mynumber = new Number(); // создает новый объект mynumber.high = 100; // создает новое свойство объекта delete mynumber.high; // удаляет свойство объекта delete mynumber; // удаляет объект langs = new Array("HTML", "CSS", "JavaScript", "Java"); delete langs[2]; // удаляет элемент массива 3.4.7.4. Операция inОперация in возвращает true, если левый операнд является свойством правого операнда. Она имеет вид: property in object где property строковое выражение, значением которого является имя свойства, или числовое выражение, задающее номер элемента массива, а object любое объектное выражение. Примеры: mynumber = new Number(); // новый объект mynumber.high = 100; // новое свойство объекта "high" in mynumber // возвращает true langs = new Array("HTML", "CSS", "JavaScript", "Java"); 0 in langs // возвращает true 4 in langs // возвращает false 3.4.7.5. Операция instanceofОперация instanceof возвращает true, если данный объект относится к данному классу объектов. Она имеет вид: object instanceof type где object любое объектное выражение, а type имя класса объектов. Примеры: myDay = new Date(1958,5,21); // новый объект myDay instanceof Date // возвращает true 3.4.7.6. Операция newОперация new создает новый объект путем вызова конструктора объектов. Она имеет вид: new type(arguments) где type имя конструктора, а arguments список параметров, разделенных запятыми, используемых для инициализации объекта. Если список параметров пуст, то круглые скобки можно опустить. Примеры: myObject = new Object; myArray = new Array(); myDate = new Date("May 21 1958"); myDay = new Date(1958,5,21); Подробнее о создании новых объектов см. п. 3.7.1.3. 3.4.7.7. Операция thisОперация this возвращает указатель на текущий объект. Она должна использоваться в выражениях вида: this.property где property имя свойства объекта. Эта операция широко применяется в обработчиках событий HTML для указания на объект, вызвавший данное событие. Например, следующий фрагмент HTML-документа содержит поле ввода возраста и сценарий, проверяющий допустимость введенного значения. <SCRIPT type="text/javascript"> function validate(obj, low, high) { if ((obj.value < low) || (obj.value > high)) alert("Недопустимое значение!") } </SCRIPT> <INPUT type="text" name="age" size="3" onchange="validate(this, 18, 99)"> Фактически, this указывает либо на глобальный объект, либо на тот объект, метод которого исполняется в данный момент. Об использовании этой операции в конструкторах объектов см. п. 3.7.1.3. 3.4.7.8. Операция typeofОперация typeof возвращает строку, содержащую информацию о типе операнда. Она имеет вид: typeof expr или typeof(expr) где expr любое выражение. Возвращаемое значение может быть одной из шести строк: "number" (число), "string" (строка), "boolean" (логическое значение), "object" (объект), "function" (функция) или "undefined" (неопределенное значение). Примеры: var size = 1; var shape = "круглый"; var today = new Date(); typeof(size); // возвращает "number" typeof shape; // возвращает "string" typeof today; // возвращает "object" Примечание. В Microsoft JScript операция typeof может возвращать еще два значения: "date" (тип VT_DATE стандарта COM) и "unknown" (COM-интерфейсы ActiveX). 3.4.7.9. Операция voidОперация void вычисляет значение выражения и возвращает undefined. Она имеет вид: void expr или void(expr) где expr любое выражение. Эта операция полезна в тех случаях, когда мы хотим вычислить значение выражения, но не хотим, чтобы оно передавалось последующей части сценария. 3.4.8. Порядок выполнения операцийПри вычислении выражений JavaScript учитывает приоритет операций: операции, имеющие больший приоритет, выполняются первыми. Если операции имеют равный приоритет, то они выполняются слева направо. Для изменения порядка выполнения операций следует пользоваться круглыми скобками: выражение, заключенное в них, имеет наивысший приоритет. В следующей таблице приведен список всех операций языка JavaScript в порядке убывания их приоритетов; операции, расположенные в одной строке таблицы, имеют равный приоритет.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||