Назад    Вперёд

Ядро JavaScript 1.5. Справочник.



 

Глава 5   Операции




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

 

В следующей таблице содержится резюме по операциям JavaScript.


Таблица 5.1    Операции JavaScript.

Категория Операции

Операция

Описание

Арифметические

+

(Сложение) Складывает 2 числа.

++

(Инкремент/Увеличение) добавляет единицу к переменной, представляющей число (возвращая новое или старое значение переменной).

-

(Унарное отрицание, вычитание) Как унарная операция выполняет отрицание аргумента. Как бинарная операция, выполняет вычитание 2 чисел.

--

(Декремент/Уменьшение) Вычитает единицу из переменной, представляющей число (возвращает новое или старое значение переменной).

*

(Умножение) Перемножает два числа.

/

(Деление) Выполняет деление одного числа на другое.

%

(Модулус) Вычисляет целочисленный остаток от деления двух чисел.

Строковые

+

(Конкатенация) Объединяются/складываются две строки.

+=

Конкатенация двух строк и присвоение результата первому операнду.

Логические

&&

(Логическое И) Возвращает первый операнд, если он может быть конвертирован в false; иначе, возвращает второй операнд. Таким образом, при использовании с Boolean-значениями, && возвращает true, если оба операнда true; иначе, возвращает false.

||

(Логическое ИЛИ) Возвращает первый операнд, если он может быть конвертирован в true; иначе, возвращает второй операнд. Таким образом, при использовании с Boolean-значениями, || возвращает true, если один из операндов true; если оба false, возвращает false.

!

(Логическое НЕТ) Возвращает false, если его единственный операнд может быть конвертирован в true; иначе, возвращает true.

Побитовые

&

(Побитовое И) Возвращает 1 в битовой позиции, если биты обоих операндов являются единицами.

^

(Побитовое исключающее ИЛИ) Возвращает 1 в битовой позиции, если бит одного, но не обоих операндов являются единицами.

|

(Побитовое ИЛИ) Возвращает 1 в битовой позиции, если бит любого операнда равен 1.

~

(Побитовое НЕ) Побитовое отрицание операнда.

<<

(Сдвиг влево) Сдвигает первый операнд в битовом представлении влево на количество битов, специфицированное вторым операндом, заполняя слева.

>>

(Сдвиг вправо с сохранением знака) Сдвигает первый операнд в битовом представлении вправо на количество битов, специфицированное вторым операндом, отбрасывая смещённые биты.

>>>

(Сдвиг вправо с заполнением нулями) Сдвигает первый операнд в битовом представлении вправо на количество битов, специфицированное вторым операндом, отбрасывая смещённые биты и заполняя слева нулями.

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

=

Присваивает первому операнду значение второго операнда.

+=

Складывает два числа и присваивает результат первому операнду.

-=

Вычитает одно число из другого и присваивает результат первому операнду.

*=

Перемножает два числа и присваивает результат первому операнду.

/=

Делит одно число на другое и присваивает результат первому операнду.

%=

Вычисляет целочисленный результат от деления двух чисел и присваивает результат первому операнду.

&=

Выполняет побитовое И и присваивает результат первому операнду.

^=

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

|=

Выполняет побитовое ИЛИ и присваивает результат первому операнду.

<<=

Выполняет сдвиг влево и присваивает результат первому операнду.

>>=

Выполняет сдвиг вправо с сохранением знака и присваивает результат первому операнду.

>>>=

Выполняет сдвиг вправо с заполнением нулями и присваивает результат первому операнду.

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

==

Возвращает true, если операнды равны.

!=

Возвращает true, если операнды не равны.

===

Возвращает true, если операнды равны и одного типа.

!==

Возвращает true, если операнды не равны и/или не одного типа.

>

Возвращает true, если левый операнд больше правого операнда.

>=

Возвращает true, если левый операнд больше или равен правому операнду.

<

Возвращает true, если левый операнд меньше правого операнда.

<=

Возвращает true, если левый операнд меньше или равен правому операнду.

Специальные

?

Выполняет обычный "if...then...else".

,

Вычисляет два выражения и возвращает результат второго.

delete

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

function

Определяет анонимную функцию.

in

Возвращает true, если специфицированное свойство имеется в специфицированном объекте.

instanceo

Возвращает true, если специфицированный объект имеет специфицированный тип объекта.

new

Создаёт экземпляр определённого пользователем типа объекта или одного из встроенных типов объекта.

this

Ключевое слово, используемое для обращения к текущему объекту.

typeof

Возвращает строку, указывающую тип невычисленного операнда.

void

Специфицирует выражение, вычисляемое без возвращения значения.


 


 

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



Операция присвоения присваивает левому операнду значение правого операнда.

Реализована в

JavaScript 1.0

Версия ECMA

ECMA-262

 

Базовая операция присвоения - знак равенства (=), который присваивает левому операнду значение правого операнда. То есть, x = y присваивает значение y значению x. Другие операции присвоения являются обычно сокращениями стандартных операций, как показано в таблице.

 

Таблица 5.2    Операции Присвоения

Сокращённая Операция

Значение

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

 

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

 

a[i++] += 5 //i вычисляется только один раз
a[i++] = a[i++] + 5 //i вычисляется дважды
 

 

 



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


 

Операция сравнения сравнивает свои операнды и возвращает логическое значение, базируясь на верности /true сравнения.

Реализована в

JavaScript 1.0

JavaScript 1.3: добавлены операции === и !==

JavaScript 1.4: == не рекомендуется для сравнения двух объектов JSObject. Используйте метод JSObject.equals.

Версия ECMA

ECMA-262 содержит все операции сравнения, кроме ===  и  !==
Версия ECMA-262 Edition 3 добавляет  ===  и  !==

 

Операнды могут иметь числовое или строковое значение. Строки сравниваются на базе стандартного лексикографического упорядочивания с использованием значений Unicode.

 

Boolean-значение возвращается как результат сравнения:

В следующей таблице даны операции сравнения.

 

Таблица5.3  Операции Сравнения

Операция

Описание

Примеры, возвращающие true1

Равно (==)

Возвращает true, если операнды равны. Если два операнда имеют разные типы, JavaScript пытается конвертировать операнды к одному типу для сравнения.

3 == var1
"3" == var1
3 == '3'

Не равно (!=)

Возвращает true, если операнды не равны. Если два операнда имеют разные типы, JavaScript пытается конвертировать операнды к одному типу для сравнения.

var1 != 4
var1 != "3"

Строго равно (===)

Возвращает true, если операнды равны и одного типа.

3 === var1

Строго не равно (!==)

Возвращает true, если операнды не равны и/или разных типов.

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 конвертирует операнды типов String, Number, Boolean или Object таким образом:

Вы не можете использовать стандартную операцию равенства (==) для сравнения экземпляров JSObject. Для таких сравнений используйте метод JSObject.equals.

 
Обратная Совместимость
 

Поведение стандартных операций равенства (== и !=) зависит от версии JavaScript.

 

JavaScript 1.3 и более ранние.

Можно использовать стандартную операцию равенства (==) или JSObject.equals для сравнения экземпляров JSObject.

 

JavaScript 1.2.

Стандартные операции равенства (== и !=) не выполняют конверсию типов перед выполнением сравнения. Операции строгого равенства (=== и !==) недоступны.

 

JavaScript 1.1 и более ранние.

Стандартные операции равенства (== и !=) выполняют конверсию типов до выполнения сравнения.

Операции строгого равенства (=== и !==) недоступны.

 

 



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



Арифметические операции принимают числовые значения (литералы или переменные) в качестве операндов и возвращают одно числовое значение. Стандартными арифметическими операциями являются сложение (+), вычитание (-), умножение (*) и деление (/).

Реализованы в

JavaScript 1.0

Версия ECMA

ECMA-262

 

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

 

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

 


% (Modulus)



Модулус-операция используется так:

 

var1 % var2

 

Возвращает целочисленный остаток от деления первого операнда на второй, то есть, var1 modulo var2, в вышеуказанной операции , где var1 и var2 это переменные. Функция modulo даёт целочисленный остаток от деления var1 на var2. Например, 100 % 3 возвращает 1.

 


++ (Инкремент/Увеличение)



Операция инкремента используется так:

 

var++  или  ++var

 

Выполняет инкремент (добавляет единицу) своего операнда и возвращает значение. Если используется как постфикс, операция после операнда (например, x++), затем возвращает значение, бывшее до инкремента. Если используется как префикс, операция

перед операндом (например, ++x), тогда возвращает, после выполнения инкремента, новое значение.

 

Например, если x равен 3, тогда операция y = x++ устанавливает y в 3 и увеличивает x до 4. Если x равен 3, то операция y = ++x выполняет инкремент x до 4 и устанавливает y в 4.

 


-- (Декремент/Уменьшение)


 

Операция декремента используется так:

 

var--  или  --var

 

Выполняет декремент (вычитает единицу) своего операнда и возвращает значение. Если используется как постфикс

(например, x--), то возвращает значение, бывшее до выполнения декремента.

 

Если используется как префикс (например, --x), тогда возвращает, после выполнения декремента, новое значение.

 

Например, если x равен 3, то операция y = x-- устанавливает y в 3 и выполняет декремент x до 2. Если x равен 3, то операция y = --x выполняет декремент x до 2 и устанавливает y в 2.

 


- (Унарное Отрицание)



Операция унарного отрицания ставится перед операндом и выполняет его отрицание. Например, y = -x меняет знак (отрицает) значения x и присваивает это значение переменной y; то есть, если x = 3, y может получить значение -3, а x останется в значении 3.

 

 

 

Побитовые Операции


 

Побитовые операции рассматривают свои операнды как наборы 32-битных значений (нулей и единиц), а не как десятеричные, 16-ричные или 8-ричные числа. Например, десятеричное число 9 имеет двоичное представление 1001. Побитовые операции выполняют свои операции с такими двоичными представлениями, но возвращают стандартные числовые значения JavaScript.

 

В таблице дано резюме по битовым операциям JavaScript:

 

Таблица 5.4    Побитовые Операции

Операция

Использование

Описание

Побитовое И

a & b

Возвращает 1 в каждой битовой позиции, в которой соответствующие биты обоих операндов равны 1.

Побитовое ИЛИ

a | b

Возвращает 1 в каждой битовой позиции, в которой соответствующий бит одного или обоих операндов равен 1.

Побитовое исключающее ИЛИ

a ^ b

Возвращает 1 в каждой битовой позиции, в которой соответствующий бит одного, но не обоих операндов, равен 1.

Побитовое НЕ

~ a

Инвертирует биты операндов.

Сдвиг влево

a << b

Сдвигает a в двоичном представлении на b битов влево, заполняя справа нулями.

Сдвиг вправо с сохранением знака

a >> b

Сдвигает a в двоичном представлении на b битов вправо, отбрасывая смещённые биты.

Сдвиг вправо с заполнением нулями

a >>> b

Сдвигает a в двоичном представлении на b битов вправо, отбрасывая смещённые биты и заполняя слева нулями.


 

 

 

Побитовые Логические Операции


 

Реализованы в

JavaScript 1.0

Версия ECMA

ECMA-262


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

Например, 1001 это двоичное представление десятеричной цифры 9, а 1111 - цифры 15.
 

Итак, если побитовые операции применить к этим значениям, результаты будут такими:




Побитовые Операции Сдвига



Реализованы в

JavaScript 1.0

Версия ECMA

ECMA-262

 

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

 

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

 

 

 

 << (Сдвиг Влево)


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

Например, 9<<2 даёт 36, поскольку 1001 сдвигается на 2 бита влево и становится 100100, т.е. 36.

 

 

 

>> (Сдвиг Вправо с Сохранением Знака)



Сдвигает первый операнд на специфицированное количество битов вправо. Излишние биты, сдвинутые вправо, отбрасываются. Слева идёт заполнение копиями самого левого бита.

Например, 9>>2 даст 2, поскольку 1001, двинутое на 2 бита вправо, становится 10, т.е. 2. Аналогично, -9>>2 даст -3, поскольку знак сохраняется.

 


 

>>> (Сдвиг Вправо с Заполнением Нулями)



Сдвигает первый операнд на специфицированное количество битов вправо.

Излишние биты, сдвинутые вправо, отбрасываются. Слева биты заполняются нулями.

 

Например, 19>>>2 даёт 4, поскольку 10011, сдвинутое два раза вправо, становится 100, то есть 4. Для неотрицательных чисел сдвиг вправо с заполнением нулями и сдвиг вправо с сохранением знака дают тот же самый результат.

 

 

 



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


 

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

 

Реализованы в

JavaScript 1.0

Версия ECMA

ECMA-262

 

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

 

Таблица 5.5    Логические Операции

Операция

Использование

Описание

&&

expr1 && expr2

(Логическое И) Возвращает expr1, если может быть конвертировано в false; иначе, возвращает expr2. Таким образом, при использовании с Boolean-значениями && возвращает true, если оба операнда true; иначе возвращает false.

||

expr1 || expr2

(Логическое ИЛИ) Возвращает expr1, если может быть конвертировано в true; иначе, возвращает expr2. Таким образом, при использовании с Boolean-значениями || возвращает true, если любой из операндов true; если оба false, возвращает false.

!

!expr

(Логическое НЕ) Возвращает false, если его единственный операнд может быть конвертирован в true; иначе возвращает true.

 

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

 

Хотя операции&& и || можно использовать с не-Boolean-значениями, их можно продолжать рассматривать как Boolean-операции, поскольку их return-значения всегда могут быть конвертированы в Boolean-значения.

 

 Сокращённый Цикл Вычисления.

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

Логические правила гарантируют, что эти вычисления всегда корректны. Обратите внимание, что часть что-либо не вычисляется, поэтому выполнение этого что-либо в качестве побочного эффекта никакого эффекта иметь не будет.


Обратная Совместимость


JavaScript 1.0 и 1.1.

Операции && и || ведут себя так:


Операция

Поведение

&&

Если первый операнд (expr1) может быть конвертирован в false, операция && возвращает false вместо значения expr1.

||

Если первый операнд (expr1) может быть конвертирован в true, операция || возвращает true вместо значения expr1.


Примеры

 

Вот примеры применения операции && (логическое И):

 

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

 

А вот примеры применения операции || (логическое ИЛИ):

 

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

 

Примеры применения операции ! (логическое НЕ):

 

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


 

 


Строковые Операции (операции работы со строками)


 

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


Реализована в

JavaScript 1.0

Версия ECMA

ECMA-262

 

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

 



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



?: (Операция Проверки Условия)


 

Операция проверки условия является единственной операцией в JavaScript, принимающей три операнда. Эта операция часто используется как сокращение вместо операции if.

Реализована в

JavaScript 1.0

Версия ECMA

ECMA-262


Синтаксис

condition ? expr1 : expr2


Параметры
condition

Выражение, вычисляемое в true или false.

expr1, expr2

Выражения со значениями любого типа.


Описание

Если condition равно true, операция возвращает значение выражения expr1; иначе - возвращает значение выражения expr2. Например, чтобы отобразить разные сообщения, в зависимости от значения переменной isMember, можно использовать такой оператор:

 

document.write ("The fee is " + (isMember ? "$2.00" : "$10.00"))

 


 

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



Операция "запятая" вычисляет оба операнда и возвращает значение второго операнда.

Реализована в

JavaScript 1.0

Версия ECMA

ECMA-262


Синтаксис

expr1, expr2


Параметры
expr1, expr2

Любые выражения.


Описание

Вы можете использовать операцию "запятая", если хотите включить несколько выражений в том месте, где требуется одно выражение. Наиболее обычное использование этой операции - поддержка нескольких параметров в цикле for.

 

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

 

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


 

 

delete



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

Реализована в

JavaScript 1.2, NES 3.0

Версия ECMA

ECMA-262


Синтаксис

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 //
code>возвращает 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) {
   //
это выполняется
}


 

function



Операция function определяет анонимную функцию внутри выражения.

Реализована в

JavaScript 1.5


Синтаксис

{var | const} variableName = function(parameters) {functionBody};


Описание

Следующие примеры показывают использование операции function.

 

Этот пример объявляет безымянную функцию внутри выражения. В переменную x устанавливается функция, возвращающая квадрат аргумента:

 

var x = function(y) {return y*y};

 

Этот пример объявляет массив a как массив из трёх функций:

 

var a = [function(y) {return y}, function y {return y*y}, function (y) [return y*y*y}];

 

Для этого массива, a[0](5) возвращает 5, a[1](5) возвращает 25, a[2](5) возвращает 125.

 

 


in



Операция in возвращает true, если специфицированное свойство имеется в специфицированном объекте.

Реализована в

JavaScript 1.4


Синтаксис

propNameOrNumber in objectName


Параметры
propNameOrNumber

Строка или числовое выражение, представляющее имя свойства или индекс массива.

objectName

Имя объекта.


Описание

Некоторые примеры использования операции in:

 

// Массивы
trees=new Array("redwood","bay","cedar","oak","maple")
0 in trees        // возвращает true
3 in trees        //
возвращает true
6 in trees        //
возвращает false
"bay" in trees    //
возвращает false (Вы обязаны специфицировать номер индекса,
                  // а не значение по этому индексу)
"length" in trees //
возвращает true (length это свойство Array)

 

// Предопределённые объекты
"PI" in Math          //
возвращает true
myString=new String("coral")
"length" in myString  //
возвращает true

 

// Специальные объекты
mycar = {make:"Honda",model:"Accord",year:1998}
"make" in mycar  //
возвращает true
"model" in mycar //
возвращает true

 

Вы обязаны специфицировать объект справа от операции in. Например, Вы можете специфицировать строку, созданную конструктором String, но не можете специфицировать строковой литерал.

 

color1=new String("green")
"length" in color1 //
возвращает true
color2="coral"
"length" in color2 //генерирует ошибку (
coral это не String-объект)

 

Использование in с удалёнными или undefined свойствами.

Если Вы удаляете свойство операцией delete, операция in возвратит false для данного свойства.

 

mycar = {make:"Honda",model:"Accord",year:1998}
delete mycar.make
"make" in mycar  //
возвращает false

trees=new Array("redwood","bay","cedar","oak","maple")
delete trees[3]
3 in trees //
возвращает false

 

Если Вы устанавливаете свойство в undefined, но не удаляете его, операция in возвращает true для этого свойства.

 

mycar = {make:"Honda",model:"Accord",year:1998}
mycar.make=undefined
"make" in mycar  //
возвращает true

trees=new Array("redwood","bay","cedar","oak","maple")
trees[3]=undefined
3 in trees //
возвращает true

 

Об использовании операции in с удалёнными элементами массива см. delete.

 

 


instanceof



Операция instanceof возвращает true, если специфицированный объект имеет специфицированный тип.

Реализована в

JavaScript 1.4


Синтаксис

objectName instanceof objectType


Параметры
objectName

Имя объекта для сравнения с objectType.

objectType

Тип объекта.


Описание

Используйте instanceof, если необходимо подтвердить тип объекта на этапе прогона. Например, при отлове исключений Вы можете выполнять ветвление по различным вариантам кода, в зависимости от типа вызываемого исключения.

 

Вы обязаны специфицировать объект справа от операции instanceof. Например, Вы можете специфицировать строку, созданную с помощью конструктора String, но не можете специфицировать строковой литерал.

 

color1=new String("green")
color1 instanceof String //
возвращает true
color2="coral"
color2 instanceof String //
возвращает false (coral не является String-объектом)


Примеры
 

См. также примеры для throw.

 

Пример 1.

В этом коде instanceof используется для определения, является ли theDay Date -объектом. Поскольку theDay является Date -объектом, операторы в операторе if выполняются.

 

theDay=new Date(1995, 12, 17)
if (theDay instanceof Date) {
   // выполняемые операторы
}

 

Пример 2.

В этом коде instanceof используется для демонстрации того, что объекты String и Date имеют также тип Object (они получены из Object).

 

myString=new String()
myDate=new Date()

myString instanceof String // возвращает true
myString instanceof Object //
возвращает true
myString instanceof Date   //
возвращает false

myDate instanceof Date     // возвращает true
myDate instanceof Object   //
возвращает true
myDate instanceof String   //
возвращает false

 

Пример 3.

В это коде создаётся тип объектов Car и экземпляр этого типа объектов, mycar. Операция instanceof демонстрирует, что объект mycar имеет тип Car и тип Object.

 

function Car(make, model, year) {
   this.make = make
   this.model = model
   this.year = year
}
mycar = new Car("Honda", "Accord", 1998)
a=mycar instanceof Car // возвращает true
b=mycar instanceof Object //
возвращает true

 

 


new



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

Реализована в

JavaScript 1.0

Версия ECMA

ECMA-262


Синтаксис

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


Параметры
objectName

Имя нового экземпляра объекта.

objectType

Тип объекта. обязан быть функцией, определяющей тип объекта.

param1...paramN

Значения свойств объекта. эти свойства являются параметрами, определёнными для функции objectType.


Описание

Создание определяемого пользователем типа объектов проходит в два шага:

  1. Определяется тип объекта путём написания функции.

  2. Создаётся экземпляр объекта с помощью оператора new.

Чтобы определить тип объекта, создайте функцию для этого типа объекта, которая специфицирует его имя, свойства и методы. Объект может иметь свойство, которое само является объектом. См. далее примеры.

 

Вы всегда можете добавить свойство к ранее определённому объекту. Например, оператор car1.color = "black" добавляет свойство color в car1 и присваивает ему значение "black". Однако это не влияет на другие объекты. Чтобы добавить свойство ко всем объектам того же типа, Вы обязаны добавить свойство в определение типа объекта car.

 

Вы можете добавить свойство к ранее определённому объекту

путём использования свойства Function.prototype. Оно определяет свойство, которое используется совместно всеми объектами, созданными данной функцией, а не только отдельным экземпляром этого типа объекта. Следующий код добавляет свойство color всем объектам типа car, а затем присваивает значение свойству color объекта car1.

Дополнительно см. prototype.

 

Car.prototype.color=null
car1.color="black"
birthday.description="The day you were born"


Примеры

 

Пример 1:

Тип объекта и экземпляр объекта. Предположим, Вы хотите создать тип объекта для автомобилей. Вы хотите назвать это тип car и Вы хотите, чтобы он имел свойства make, model и year. Для выполнения этого Вы можете написать следующую функцию:

 

function car(make, model, year) {
   this.make  = make
   this.model = model
   this.year  = year
}

 

Теперь Вы можете создать объект под названием mycar таким образом:

 

mycar = new car("Eagle", "Talon TSi", 1993)

 

Этот оператор создаёт mycar и присваивает его свойствам специфицированные значения. Теперь значением mycar.make является строка "Eagle", а mycar.year - это целое число 1993, и так далее.

 

Вы можете создать любое количество объектов типа car через вызов new. Например:

 

kenscar = new car("Nissan", "300ZX", 1992)

 

Пример 2:

Свойство объекта, которое само является объектом. Предположим, Вы определяете объект под названием person:

 

function person(name, age, sex) {
   this.name = name
   this.age = age
   this.sex = sex
}

 

и создаёте два экземпляра person-объектов:

 

rand = new person("Rand McNally", 33, "M")
ken = new person("Ken Jones", 39, "M")

 

затем Вы можете переписать определение типа car для включения в него свойства owner, которое принимает person-объект:

 

function car(make, model, year, owner) {
   this.make = make;
   this.model = model;
   this.year = year;
   this.owner = owner;
}

 

Чтобы создать новые экземпляры объекта, Вы пишете:

 

car1 = new car("Eagle", "Talon TSi", 1993, rand);
car2 = new car("Nissan", "300ZX", 1992, ken)

 

Вместо передачи строкового литерала или целочисленного значения при создании новых объектов, предыдущие операторы передают объекты rand и ken в качестве параметров для owners. Чтобы найти имя владельца машины car2, Вы можете получить доступ к свойству:

 

car2.owner.name

 

 

this



Это ключевое слово ссылается на текущий объект. Вообще, в методе this ссылается на вызывающий объект.

Реализован в

JavaScript 1.0

Версия ECMA

ECMA-262


Синтаксис

this[.propertyName]


Примеры

 

Предположим, функция под названием validate проверяет значение свойства объекта и верхнее и нижнее значения:

 

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

 

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

 

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


 

 

typeof



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

 

1. typeof operand
2. typeof (operand)

 

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

Реализована в

JavaScript 1.1

Версия ECMA

ECMA-262

 

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

 

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. Скобки не обязательны, но хорошим стилем является их наличие.

Реализована в

JavaScript 1.1

Версия ECMA

ECMA-262

 

Вы можете использовать операцию 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>

 

 

 

Назад    Вперёд

Copyright © 2000 Netscape Communications Corp. Все права зарезервированы.

Дата последнего обновления: 28 сентября 2000 г.

Hosted by uCoz