создание и продвижение сайта (вбиваю в ТОП-10, как гвозди)Настройка и сопровождение платной рекламы яндекс.директ

JavaScript (основы). Глава 3. Выражения и операции

Оглавление | Назад | Вперёд | Индекс

Глава 3. Выражения и операции

В этой главе рассматриваются выражения и операции JavaScript, в том числе - операции присвоения, сравнения, арифметические, битовые, логические, строковые и специальные.

В главе имеются следующие разделы:

  • Выражения
  • Операции

    Выражения

    Выражение\expression - это правильный набор литералов, переменных, операций и выражений, который вычисляется в единственное значение (значение может быть числом, строкой или логическим значением).

    Концептуально имеются выражения 2 типов: присваивающие значение переменной, и те, которые просто имеют значение. Например, выражение x=7 присваивает переменной x значение 7. Это выражение вычисляется в 7. Такие выражения используют операции присвоения. Выражение 3+4 вычисляется в 7, оно выполняет операцию присвоения значения. Операции в таких выражениях называются просто операции.

    В JavaScript имеются следующие типы выражений:

  • Арифметические: вычисляются в число, например, 3.14159;
  • Строковые: вычисляются в строку символов, например, "Fred" или "234";
  • Логические: вычисляются в true или false.

    Операции

    В этом разделе рассматриваются операции и приоритет выполнения. В JavaScript имеются следующие типы операций:

  • Операции присвоения
  • Операции сравнения
  • Арифметические
  • Битовые
  • Логические
  • Строковые
  • Специальные

    В JavaScript есть как бинарные, так и унарные операции. Бинарная операция работает с 2 операндами, 1 - до знака операции, другой - после:

    операнд1 операция операнд2

    Например, 3+4 или x*y.

    Для унарной операции нужен 1 операнд, до или после знака операции:

    операция операнд

    или

    операнд операция

    Например, x++ или ++x.

    Кроме того, в JavaScript имеется тернарная условная операция. Тернарная операция требует 3 операндов.

    Операции присвоения

    Операция присвоения присваивает левому операнду значение правого операнда. Базовой операцией присвоения является "равно" (=), которая присваивает левому операнду значение правого операнда. Т.е., x=y присваивает значение у переменной х.

    Другие операции присвоения являются аббревиатурами стандартных операций, как видно из таблицы.

    Таблица 3.1. Операции присвоения
    АббревиатураЗначение
    x+=yx=x+y
    x-=yx=x-y
    x*=yx=x*y
    x/=yx=x/y
    x%=yx=x%y
    x<<=yx=x<<y
    x>>=yx=x>>y
    x>>>=yx=x>>>y
    x&=yx=x&y
    x^=yx=x^y
    x|=yx=x|y

    Операции сравнения

    Операция сравнения сравнивает операнды и возвращает значение, основанное на true/верности сравнения. Операнды могут быть числами или строками. Строки сравниваются на основе стандартного лексикографического (словарного) порядка с использованием Unicode-значений. В таблице даны операции сравнения.

    Таблица 3.2. Операции сравнения

    Операция Описание Примеры, возвращающие true 1
    Равно (==) Возвращает true, если операнды равны. Если 2 операнда имеют разные типы, JavaScript пытается конвертировать операнды в значения, подходящие для сравнения. 3==var1 "3"==var1 3=='3'
    Не равно (!=) Возвращает true, если операнды не равны. Если 2 операнда имеют разные типы, JavaScript пытается конвертировать операнды в значения, подходящие для сравнения. var1!=4 var2!="3"
    Строго равно (===) Возвращает true, если операнды равны и 1 типа. 3===var1
    Строго не равно (!==) Возвращает true, если операнды не равны и/или не 1 типа. var1 !=="3" 3 !=='3'
    Больше (>) Возвращает true, если левый операнд больше правого операнда. var2>var1
    Больше или равно (>=) Возвращает true, если левый операнд больше правого операнда или равен ему. var2>=var1 var1>=3
    Меньше (<) Возвращает true, если левый операнд меньше правого операнда. var1<var2
    Меньше или равно (<=) Возвращает true, если левый операнд меньше правого операнда или равен ему. var1<=var2 var2<=5

    1В этих примерах принимается, что переменной var1 присвоено значение 3, а переменной var2 присвоено значение 4.

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

    Арифметические операции принимают в качестве операндов числовые значения (литералы или переменные) и возвращают единственное значение-результат. Стандартными арифметическими операциями являются операции сложения (+), вычитания (-), умножения (*) и деления (/). Эти операции работают так же, как и в большинстве других языков программирования, только операция / в JavaScript возвращает частное с плавающей точкой, а не округлённое частное, как в C или Java. Например:

    1/2 //возвращает 0.5 в JavaScript 1/2 //возвращает 0 в Java

    Кроме того, JavaScript предоставляет арифметические операции, перечисленные в таблице.

    Таблица 3.3. Арифметические операции

    Операция Описание Пример
    % (Целочисленный остаток) Бинарная операция. Возвращает целочисленный остаток от деления двух операндов. 2%5 возвращает 2.
    ++ (Инкремент) Унарная операция. Прибавляет 1 к операнду. Если используется как префикс (++x), возвращает значение операнда после прибавления 1; если используется как постфикс (x++), возвращает значение операнда до прибавления 1. Если x равен 3, то ++x устанавливает 4 в x и возвращает 4, а x++ устанавливает 4 в x и возвращает 3.
    -- (Декремент) Унарная операция. Вычитает 1 из операнда. Возвращаемые значения аналогичны оператору инкремента. Если x равен 3, то --x устанавливает 2 в x и возвращает 2, а x++ устанавливает 2 в x и возвращает 3.
    - (Унарное отрицание) Унарная операция. Возвращает отрицание операнда. Если x равен 3, то -x возвращает -3.

    Битовые операции

    Битовые операции рассматривают свои операнды как 32-битные целые значения (последовательность 0 и 1), а не как 10-ричные, 16-ричные или 8-ричные числа. Например, десятеричное 9 имеет бинарное представление 1001. Битовые операции выполняются над такими двоичными представлениями, но возвращают стандартные числовые значения JavaScript.

    В таблице приведены битовые операции JavaScript.

    Таблица 3.4. Битовые операции

    Операция Использование Описание
    И a&b Возвращает 1 в позиции каждого бита, где соответствующий бит обоих операндов =1.
    ИЛИ a|b Возвращает 1 в позиции каждого бита, где соответствующий бит 1 или обоих операндов =1.
    Исключающее ИЛИ/XOR a^b Возвращает 1 в позиции каждого бита, где соответствующий бит 1, но не обоих, операндов =1.
    НЕ ~a Инвертирует биты операнда.
    Сдвиг влево a<<b Сдвигает операнд a в бинарном представлении на b битов влево, заполняя справа нулями.
    Сдвиг вправо с сохранением знака a>>b Сдвигает операнд a в бинарном представлении на b битов вправо, отбрасывая смещённые биты.
    Сдвиг вправо с заполнением нулями a>>>b Сдвигает операнд a в бинарном представлении на b битов вправо, отбрасывая смещённые биты и заполняя слева нулями.

    Битовые логические операции

    Концептуально битовые логические операции работают так:

  • Операнды конвертируются в 32-битные целые и выражаются серией битов (нулей и единиц).
  • Каждый бит 1-го операнда образует пару с соответствующим битом 2-го операнда: первый бит с первым, второй со 2-м и т.д.
  • Операция применяется к каждой паре битов, и результат конструируется побитно.

    Например, цифра 9 имеет двоичное/бинарное представление 1001, а цифра 15 - 1111. Поэтому результаты применения битовых операций к этим значениям будут такими:

  • 15&9 даст 9 (1111&1001=1001)
  • 15|9 даст 15 (1111|1001=1111)
  • 15^9 даст 6 (1111^1001=0110)

    Битовые операции сдвига

    Операции битового сдвига принимают 2 операнда: первый это сдвигаемое число, а 2-й специфицирует количество битовых позиций, на которое сдвигается первый операнд. Направление сдвига контролируется самой операцией.

    Операции сдвига конвертируют свои операнды в 32-битные целые числа и возвращают результат того же типа, что и у левого операнда.

    Операции сдвига перечислены в следующей таблице.

    Таблица 3.5. Операции битового сдвига

    Операция Описание Пример
    << (Сдвиг влево) Эта операция сдвигает влево первый операнд на специфицированное 2-м операндом количество битов. Излишние биты, сдвинутые влево, отбрасываются. Справа идёт заполнение нулями. 9<<2 даёт 36, поскольку 1001, сдвинутое на 2 бита влево, становится 100100, что =36.
    >> (Сдвиг вправо с сохранением знака) Эта операция сдвигает вправо первый операнд на специфицированное 2-м операндом количество битов. Излишние биты, сдвинутые вправо, отбрасываются. Копии левых битов вставляются слева. 9>>2 даёт 2, поскольку 1001, сдвинутое на 2 бита вправо, становится 10, что =2. Аналогично -9>>2 даёт -3, поскольку знак сохраняется.
    >>> (Сдвиг вправо с заполнением нулями) Эта операция сдвигает вправо первый операнд на специфицированное 2-м операндом количество битов. Излишние биты, сдвинутые вправо, отбрасываются. Слева идёт заполнение нулями. 19>>>2 даёт 4, поскольку 10011, сдвинутое на 2 бита вправо, становится 100, т.е. 4. Для неотрицательных чисел сдвиг вправо с заполнением нулями и сдвиг вправо с сохранением знака дают одинаковые результаты.

    Логические операции

    Логические операции обычно используются с булевыми (логическими) значения; эти операции возвращают Булево значение. Однако операции && и||в действительности возвращают значение 1 из специфицированных операндов, поэтому, если эти операции используются с не-Булевыми значениями, они могут вернуть не-Булево значение. Логические операции перечислены в таблице.

    Таблица 3.6. Логические операции

    Операция Использование Описание
    && expr1&&expr2 (Логическое И) Возвращает expr1, если может быть конвертировано в false; иначе возвращает expr2. Таким образом, при использовании с Булевыми значениями && возвращает true, если оба операнда true; иначе, возвращает false.
    || expr1||expr2 (Логическое ИЛИ) Возвращает expr1, если может быть конвертировано в false; иначе возвращает expr2. Таким образом, при использовании с Булевыми значениями||возвращает true, если любой из операндов true; если оба false, возвращает false.
    ! !expr (Логическое НЕ) Возвращает false, если её единственный операнд может быть конвертирован в true; иначе возвращает true.

    Примерами выражений, которые могут быть конвертированы в false, являются выражения, вычисляемые в null, 0, пустую строку ("") или undefined.

    А это примеры операции && (logical AND).

    a1=true && true//t && t возвращает true a2=true && false//t && f возвращает false a3=false && true//f && t возвращает false

    a4=false && (3==4)//f && f возвращает false

    a5="Cat" && "Dog"//t && t возвращает Dog

    a6=false && "Cat"//f && t возвращает false

    a7="Cat" && false//t && f возвращает false

    Следующий код это примеры операции||(logical OR).

    o1=true||true//t||t возвращает true o2=false||true//f||t возвращает true o3=true||false//t||f возвращает true o4=false||(3==4)//f||f возвращает false

    o5="Cat"||"Dog"//t||t возвращает Cat

    o6=false||"Cat"//f||t возвращает Cat

    o7="Cat"||false//t||f возвращает Cat

    Следующий код это примеры операции ! (logical NOT).

    n1=!true//!t возвращает false n2=!false//!f возвращает true n3=!"Cat"//!t возвращает false

    Сокращённый цикл вычисления

    Поскольку логические выражения вычисляются слева направо, они проверяются на возможность "сокращённого/short-circuit" вычисления по следующим правилам:

  • false && anything ускоренно вычисляется в false.
  • true||anything ускоренно вычисляется в true.

    Правила логики гарантируют, что эти вычисления всегда корректны. Обратите внимание, что часть anything вышеприведённых выражений не вычисляется, поэтому выполнение полного вычисления не даст никакого эффекта.

    Строковые операции

    Помимо операций сравнения, которые могут использоваться со строковыми значениями, операция конкатенации (+) объединяет 2 строковых значения, возвращая строку, которая является результатом объединения двух строк-операндов. Например, "my " + "string" возвращает строку "my string".

    Операция-аббревиатура присвоения += также может использоваться для конкатенации строк. Например, если переменная mystring имеет значение "alpha", то выражение mystring += "bet" вычисляется в "alphabet" и это значение присваивается переменной mystring.

    Специальные операции

    В JavaScript имеются следующие специальные операции:

  • условная операция
  • операция, (запятая)
  • delete
  • new
  • this
  • typeof
  • void

    условная операция

    Условная операция это единственная операция JavaScript, принимающая три операнда. Эта операция может иметь одно из двух значений на основе выполнения условия. Синтаксис таков:

    condition?val1:val2

    Если condition true, операция выдаёт значение val1. Иначе она выдаёт значение val2. Вы можете использовать условную операцию там же, где используется стандартный оператор if.

    Например,

    status=(age>=18)?"adult":"minor"

    Этот оператор присваивает значение "adult" переменной status, если age имеет значение 18 или более. Иначе переменной status присваивается значение "minor".

    операция, (запятая)

    Операция "запятая" (,) просто вычисляет 2 операнда и возвращает значение 2-го операнда. Эта операция используется в основном в цикле for, позволяя обновлять несколько переменных при каждом проходе цикла.

    Например, если a это 2-мерный массив из 10 элементов по измерению, следующий код использует операцию, для инкремента сразу двух переменных. Код печатает значения элементов по диагонали массива:

    for(var i=0,j=9;i<=9;i++,j--)document.writeln("a["+i+","+j+"]="+a[i,j])

    delete

    Операция delete удаляет объект, свойство объекта или элемент по специфицированному индексу массива. Синтаксис таков:

    delete objectName delete objectName. property delete objectName [ index ] delete property//допустимо только в операторе with

    где objectName это имя объекта, property это существующее свойство, а index это целое число - местонахождение элемента в массиве.

    Четвёртая форма верна только в операторе with и удаляет свойство объекта.

    Вы можете использовать операцию delete для удаления переменных, объявленных неявно, но не для удаления переменных, объявленных оператором var.

    Если операция delete прошла успешно, она устанавливает свойство или элемент в значение undefined. Операция delete возвращает true, если операция возможна; она возвращает false, если операция невозможна.

    x=42

    var y=43 myobj=new Number()myobj.h=4//создаёт свойство h delete x//возвращает true (можно удалить, если переменная х объявлена неявно)

    delete y//возвращает false (нельзя удалять, если объявлена с использованием var)

    delete Math.PI//возвращает false (нельзя удалять предопределенные свойства)

    delete myobj.h//возвращает true (можно удалять свойства, определённые пользователем)

    delete myobj//возвращает true (можно удалять объект, определённый пользователем)

    Удаление элементов массива

    Если Вы удаляете элемент массива, размер массива не изменяется. Например, если Вы удаляете a[3], то a[4] продолжает оставаться a[4], а a[3] имеет значение undefined.

    Если операция delete удаляет элемент массива, этот элемент больше не присутствует в массиве. В следующем примере trees[3] удаляется операцией delete.

    trees=new Array("redwood","bay","cedar","oak","maple") delete trees[3] if(3 in trees){//здесь операторы не выполняются}

    Если Вы хотите, чтобы элемент массива существовал, но имел неопределённое/undefined значение, используйте ключевое слово undefined вместо операции delete. В следующем примере элементу trees[3] присваивается значение undefined, но элемент массива продолжает существовать:

    trees=new Array("redwood","bay","cedar","oak","maple") trees[3]=undefined if(3 in trees){//здесь операторы будут выполняться}

    new

    Операция new используется для создания нового экземпляра объекта пользовательского типа или предопределённых типов Array, Boolean, Date, Function, Image, Number, Object, Option, RegExp или String. На сервере Вы можете также использовать эту операцию с объектами DbPool, Lock, File или SendMail. Используйте new так:

    objectName=new objectType(param1[,param2]…[,paramN])

    Вы можете также создавать объекты с использованием инициализаторов объектов, как описано в разделе "Использование Инициализаторов Объектов".

    this

    Используйте ключевое слово this для обращения к текущему объекту. Вообще this ссылается на вызывающий объект в методе. Используйте this так:

    this[. propertyName ]

    Пример 1. Функция validate проверяет свойство value объекта, имея high и low-значения:

    function validate(obj, lowval, hival){if((obj.value < lowval)||(obj.value>hival))alert("Invalid Value!")}

    Вы можете вызывать validate в обработчике onChange каждого элемента формы, используя this для передачи в функцию элемента формы, как в следующем примере:

    <B>Enter a number between 18 and 99:</B><INPUT TYPE=text NAME=age SIZE=3 onChange="validate(this,18,99)">

    Пример 2. В сочетании со свойством form, слово this может ссылаться на родительскую форму текущего объекта. В следующем примере форма myForm содержит Text-объект и кнопку. Если пользователь щёлкает по кнопке, в объект Text устанавливается имя формы. Обработчик onClick кнопки использует this.form для обращения к родительской форме myForm.

    <FORM NAME="myForm"> Form name:<INPUT TYPE=text NAME=text1 VALUE=Beluga><P><INPUT NAME="button1" type=button VALUE="Show Form Name"

    onClick="this.form.text1.value=this.form.name">

    </FORM>

    typeof

    Операция typeof используется двумя способами:

    1. typeof operand 2. typeof (operand)

    Операция typeof возвращает строку - тип невычисленного операнда. operand это строка, переменная, ключевое слово или объект, тип которого возвращается. Скобки не обязательны.

    Предположим, Вы определяете следующие переменные:

    var myFun=new Function("5+2")var shape=round var size=1 var today=new Date()

    Операция typeof возвращает для этих переменных следующие результаты:

    typeof myFun is object typeof shape is string typeof size is number typeof today is object typeof dontExist is undefined

    Для ключевых слов true и null операция typeof возвращает:

    typeof true is boolean typeof null is object

    Для числа или строки операция typeof возвращает:

    typeof 62 is number typeof 'Hello world' is string

    Для значений свойств операция typeof возвращает тип значения, содержащегося в свойстве:

    typeof document.lastModified is string typeof window.length is number typeof Math.LN2 is number

    Для методов и функций операция typeof возвращает такие результаты:

    typeof blur is function typeof eval is function typeof parseInt is function typeof shape.split is function

    Для предопределённых объектов операция typeof возвращает:

    typeof Date is function typeof Function is function typeof Math is function typeof Option is function typeof String is function

    void

    Операция void используется одним из следующих способов:

    1. void (expression) 2. void expression Операция void специфицирует выражение, вычисляемое без возвращения значения. expression это вычисляемое выражение JavaScript. Скобки вокруг expression не обязательны, но их использование является хорошим стилем.

    Вы можете использовать операцию void для специфицирования выражения как гиперссылки. Выражение вычисляется, но не загружается вместо текущего документа.

    Следующий код создаёт гиперссылку, которая не выполняет никаких действий, если пользователь щёлкнет по ней. Если пользователь щёлкает по этой ссылке, void(0) вычисляется в 0, но это не вызывает никаких действий в JavaScript.

    <A HREF="javascript:void(0)">Click here to do nothing</A>

    Следующий код создаёт гиперссылку, которая отправляет форму на сервер, если пользователь щёлкнул по этой ссылке.

    <A HREF="javascript:void(document.form.submit())">Click here to submit</A>

    Приоритет операций

    Приоритет операций определяет порядок, в котором они выполняются при вычислении выражения. Вы можете переопределить приоритет операций путём использования скобок.

    В следующей таблице показан приоритет выполнения операций, от низшего к высшему.

    Таблица 3.7. Приоритет операций
    Тип операцииОперации
    запятая,
    присвоения= += -= *= /= %= <<= >>= >>>= &= ^= |=
    условная?:
    логическаяor||
    логическаяand&&
    битоваяor|
    битовая xor^
    битовая and&
    равенство== !=
    сравнения< <= > >=
    битовый сдвиг<< >> >>>
    сложение/вычитание+ -
    умножение/деление* / %
    отрицание/инкремент! ~ - + ++ -- typeof void delete
    вызов()
    создание экземпляраnew
    член. []

    Оглавление | Назад | Вперёд | Индекс

  • Отвечу на любые вопросы. С уважением, Дмитрий Владимирович.

    Ваше письмо×
    Free Web Hosting