Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТЯП-Лекция 02.docx
Скачиваний:
17
Добавлен:
11.06.2015
Размер:
349.33 Кб
Скачать

Другие операции

Условная операция ?:

Условная операция имеет три операнда, первый задаёт проверяемое условие, в зависимости от истинности или ложности которого операция выдаёт результат второго или третьего операнда, соответственно.

Синтаксис операции: условие?выражение1:выражение2

(читается: «если условие истинно, то выражение1, иначе выражение2»).

Здесь условие– это выражение, результат которого является логическим значением (или преобразуется в логическое значение) – обычно это сравнение. Второй и третий операнды могут быть выдавать любые значения. Значение, выдаваемое условной операцией, зависит от логического значения первого операнда (условие). Если это значениеtrue, то условное выражение принимает значение второго операнда (выражение1). Если первый операнд равенfalse, то условное выражение принимает значение третьего операнда (выражение2).

Пример: выражениеa>b ? a : bвычисляет наибольшее значение изaиb.

Операция typeof

Операция typeofиспользуется для проверки типа получаемых значений. Унарная операцияtypeofвыдаёт строку с названием типа значения, которое выдаст выражение-операнд. Результатом этой операции могут быть только следующие строки:

number– для числовых значений;

string– для строковых значений;

boolean– для логических (булевых) значений;

object– дляnullи для любого объекта, кроме функций;

function– для функций и методов;

undefined–для неопределённого значения (undefined).

Синтаксис операции:

typeof выражение илиtypeof(выражение)

Примеры: 1)typeof 0/0– деление выдастNaN, аtypeof выдастnumber.

2) typeof [1,2,3] – выдаст object.

3) typeof alert – выдаст function.

4) typeof 3.14.toString – выдаст function.

Операция new

Операция newс помощью функции-конструктора создаёт новый объект и выдаёт ссылку на него. Это унарная операция, имеющая следующий синтаксис:new конструктор(аргументы)

Здесь конструктор – это выражение, результатом которого является функция-конструктор, и за ним должны следовать ноль или болееаргументов, разделённых запятыми.

Примеры: 1) Выражениеnew Array(1,2,3)выполнится та же, как литерал[1,2,3](здесьArray– конструктор массивов).

2) new Date()создаст объект текущей даты-времени, взяв данные из компьютерных часов, и выдаст ссылку на него;alert(new Date())напечатает строковое представление этого объекта, примерно так:

Mon Aug 18 2014 13:34:04 GMT+0400 (Московское время (зима))

Синтаксис и семантика выражений

Синтаксическая конструкция выражение– это комбинация операций, функций, литералов, имён переменных и круглых скобок «( )», которая используется для вычисления значения, а также, возможно, выполнения каких-то других действий.

Например, операция присваивания присваивает некоторое значение получателю (и это традиционно считается основным назначением этой операции), функция alertвсегда выдаёт неопределённое значениеundefined, а основное её назначение – выдача сообщения на экран. Поэтому присваивания и функции часто используются как операторы, которые если и выдают значение, то оно потом нигде не используется.

Приведём теперь формальное определение выражения. В нём в качестве метасимволов используются символы ,и │, которые применялись в определении литералов вещественных чисел, а также символ →, который здесь читается, как «– это». Например, «выражение→ …» читается, как «выражение– это …».

Выражение ПервичноеВыражение │ Выражение ИнфикснаяОперация Выражение │ ПрефикснаяОперация Выражение │ Выражение ПостфикснаяОперация │ УсловноеВыражение │ ЭлементМассива │ СвойствоОбъекта

ПервичноеВыражение Литерал │ Идентификатор │ (Выражение)│ ВызовФункции

ИнфикснаяОперация * │ / │ % │ + │ - │ < │ <= │ > │ >= │ == │ != │ === │ !== │ && │ || │ = │ *= │ /= │ %= │ += │ -=

ПрефикснаяОперация→ ++ │ -- │ + │ - │ ! │ typeof │ new

ПостфикснаяОперация ++ │ --

УсловноеВыражение Выражение ? Выражение : Выражение

ЭлементМассива Выражение[Выражение]

СвойствоОбъекта Выражение.Идентификатор│ this.Идентификатор

ВызовФункции Выражение(Аргументы)

АргументыВыражение ,Аргументы

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

Пример: выражениеa-b*c-dдопускает пять вариантов разбора в зависимости от того, к какой операции отнести операндыbиc. Покажем эти варианты, введя дополнительные скобки, устраняющие неоднозначность:

1) ((a-b)*c)-d

2) (a-(b*c))-d

3) a-((b*c)-d)

4) a-(b*(c-d))

5) (a-b)*(c-d)

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

  1. В бинарной операции сначала вычисляется первый операнд, а потом второй, если явно не оговорено иное.

  2. В вызове функции сначала вычисляется ссылка на функцию (первое выражение), а затем выражения-аргументы слева направо.

  3. В литералах массива и объекта выражения для значений элементов и свойств вычисляются слева направо.

Но это правило применяется тогда, когда синтаксический разбор выражения уже сделан. Для устранения неоднозначности разбора операциям языка приписывают приоритет– некоторую числовую величину. Значение этой величины не играет роли. Важно только соотношение приоритетов: >, < или =.

Для разных языков определения приоритетов операций несколько различаются. В языке JavaScriptони задаются следующей таблицей. В ней приоритет операций убывает от верхней строки таблицы к нижней. Операции в одной строке имеют одинаковый приоритет.

Операции

Описание

. []

Компонентные операции

++ -- - + ! typeof new

Унарные операции

* / %

Умножение и деление

+ -

Сложение, вычитание, конкатенация

< <= > >=

Меньше, меньше или равно, больше, больше или равно

== != === !==

Равно, не равно, тождественно, не тождественно

&&

Логическое И

||

Логическое ИЛИ

?:

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

= += -= *= /= %=

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

В ситуации неопределённости, когда операнд оказывается между двумя операциями (например, …+3*…), применяются следующиеправила приоритетностиопераций:

  1. Если приоритеты операций разные, операнд связывается с более приоритетной операцией.

  2. Если операции одноприоритетные и обе не являются операциями присваивания, то операнд связывается с левой операцией (т.е. такие операции выполняются слева направо).

  3. Если обе операции – операции присваивания, то операнд связывается с правой операцией (т.е. операции присваивания выполняются справа налево).

Пример: просматриваем выражениеa-b*c-dслева направо и вставляем скобки для связывания операндов с операциями в соответствии с правилами приоритетности:a-b*c-d  a-(b*c-d  a-(b*c)-d. И снова просматриваем выражение с начала, т.к. есть операнд между операциями:a-(b*c)-d  (a-(b*c))-d. Теперь полученправильный синтакси­ческий разбор, в соответствии с которым сначала выполняется умножение, затем к его результату применяется первое вычитание, к результату которого применяется второе вычитание.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]