Операторы

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

Операторы JavaScript
ОператорОписание
Арифметические
+(Сложение) Складывает два числа.
++(Инкремент) Прибавляет 1 к переменной, представляющей число (возвращая новое или старое значение переменной).
-(Унарное отрицание, вычитание) Как унарная операция отрицает значение аргумента. Как бинарная - вычитает второй аргумент из первого.
--(Декремент) Вычитает 1 из переменной, представляющей число (возвращая новое или старое значение переменной).
*(Умножение) Перемножает два числа.
/(Деление) Делит одно число на другое.
%(Modulus) Вычисляет целочисленный остаток от деления двух чисел.
Строковые
+(Сложение строк/Конкатенация) Объединяет две строки.
+=Объединяет две строки и присваивает результат первому операнду.
Логические
&&(Логическое И) Возвращает первый операнд, если он может быть конвертирован в false; иначе возвращает второй операнд. При использовании с Булевыми значениями && возвращает true, если оба операнда true; иначе возвращает false.
||(Логическое ИЛИ) Возвращает первый операнд, если он может быть конвертирован в false; иначе возвращает второй операнд. При использовании с Булевыми значениями || возвращает true, если любой из операндов true; если оба false, возвращает false.
!(Логическое НЕ) Возвращает false, если единственный операнд может быть конвертирован в true; иначе возвращает true.
Побитовые
&(Побитовое И) Возвращает 1 в каждой битовой позиции, если биты обоих операндов равны единице.
^(Побитовое исключающее ИЛИ) Возвращает 1 в каждой битовой позиции, если бит одного, но не обоих операндов равен 1.
|(Побитовое ИЛИ) Возвращает 1 в битовой позиции, если бит любого операнда равен 1.
~(Побитовое НЕ) Инвертирует биты операнда.
<<(Сдвиг влево) Сдвигает влево первый операнд, в двоичном представлении, на количество битов, специфицированное вторым операндом, заполняя справа нулями.
>>(Сдвиг вправо с сохранением знака) Сдвигает вправо первый операнд, в двоичном представлении, на количество битов, специфицированное вторым операндом, отбрасывая сдвинутые биты.
>>>(Сдвиг вправо с заполнением нулями) Сдвигает вправо первый операнд, в двоичном представлении, на количество битов, специфицированное вторым операндом, отбрасывая сдвинутые биты и заполняя нулями слева.
Операторы Присвоения
=Присваивает значение второго операнда первому операнду.
+=Складывает два числа и присваивает результат первому.
-=Вычитает два числа и присваивает результат первому.
*=Умножает два числа и присваивает результат первому.
/=Делит два числа и присваивает результат первому.
%=Вычисляет целочисленный остаток от деления двух чисел и присваивает результат первому.
&=Выполняет побитовое AND и присваивает результат первому операнду.
^=Выполняет побитовое XOR и присваивает результат первому операнду.
|=Выполняет побитовое OR и присваивает результат первому операнду.
<<=Выполняет побитовый сдвиг влево и присваивает результат первому операнду.
>>=Выполняет побитовый сдвиг вправо с сохранением знака и присваивает результат первому операнду.
>>>=Выполняет побитовый сдвиг вправо с заполнением нулями и присваивает результат первому операнду.
Операторы Сравнения
==Возвращает true, если операнды равны.
!=Возвращает true, если операнды не равны.
===Возвращает true, если операнды равны и одного типа.
!==Возвращает true, если операнды не равны и/или не одного типа.
>Возвращает true, если левый операнд больше правого.
>=Возвращает true, если левый операнд больше правого или равен ему.
<Возвращает true, если левый операнд меньше.
<=Возвращает true, если левый операнд меньше правого или равен ему.
Специальные Операторы
?: Условный операторВыполняет простой оператор "if...then...else"
, ЗапятаяВычисляет два выражения и возвращает результат второго выражения.
АксессорыПредоставляют доступ к свойствам объекта.
    delete    Удаляет объект, свойство объекта или элемент по специфицированному индексу в массиве.
inОператор in возвращает true, только если данное свойство присутствует в объекте или его прототипе.
instanceofОператор instanceof используется для проверки, принадлежит ли объект данному типу.
newСоздаёт экземпляр объекта определённого пользователем типа или одного из встроенных типов.
thisКлючевое слово, которое можно использовать для обращения к текущему объекту.
typeofВозвращает строку, указывающую тип невычисленного операнда.
voidСпецифицирует выражение, вычисляемое без возвращения значения.

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

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

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

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

% (Modulus/целочисленный остаток)

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

var1 % var2

Функция modulos это целочисленный остаток от деления var1 на var2. Например, 12 % 5 возвращает 2.

++ (Инкремент)

Оператор инкремента выполняется так:

var++     
или
++var 

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

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

-- (Декремент)

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

var--    
или
--var 

Этот оператор выполняет декремент (вычитает 1) операнда и возвращает его значение. Если это постфикс, когда оператор находится после операнда (например, 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.

Строковые Операторы

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

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

Логические операторы

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

Однако, в javascript операторы && и || возвращают не булево значение, а один из операндов, определивший значение выражения. Конечно, результат в таком случае может быть и не булевым.

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

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

К false преобразуются, например: null, 0, пустая строка ("") и undefined.

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

Оператор ! также используется для быстрого преобразования выражения к булевому значению:

!!"string" = true
!!null = false

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

Так как логические выражения вычисляются слева направо, они проверяются на возможность "сокращенных вычислений" по следующим правилам:

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

a =1
check = 5 || (a=3)

alert(a) // 1

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

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

Побитовые Операторы
ОператорИспользованиеОписание
  AND  a & b Возвращает 1 в каждой битовой позиции, где оба бита операндов равны 1.
  OR  a | bВозвращает 1 в каждой битовой позиции, где один или оба бита операндов равны 1.
  XOR  a ^ bВозвращает 1 в каждой битовой позиции, где один, но не оба бита операндов равен 1.
  NOT  ~ aИнвертирует биты операнда.
 Сдвиг влево  a << bСдвигает a в двоичном представлении на b битов влево, заполняя справа нулями.
 Сдвиг вправо с сохранением знака  a >> bСдвигает a в двоичном представлении на b битов вправо, отбрасывая сдвинутые биты.
Сдвиг вправо с заполнением нулями  a >>> bСдвигает a в двоичном представлении на b битов вправо, отбрасывая сдвинутые биты и заполняя слева нулями.

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

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

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

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

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

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

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

Этот оператор сдвигает влево первый операнд на специфицированное вторым операндом количество бит. Излишние биты, сдвинутые влево, отбрасываются. Справа заполнение идёт нулями.
Например, 9<<2 даёт 36, поскольку 1001, сдвинутое на 2 бита влево становится 100100, что равно 36.
>> (Сдвиг вправо с сохранением знака)

Этот оператор сдвигает вправо первый операнд на специфицированное вторым операндом количество бит. Излишние биты, сдвинутые вправо, отбрасываются. Копии самых левых битов вставляются слева.
Например, 9>>2 даёт 2, поскольку 1001, сдвинутое на 2 позиции вправо, становится 10, то есть 2. Аналогично, -9>>2 даёт -3, поскольку знак сохраняется.
>>> (Сдвиг вправо с заполнением нулями)

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

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

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

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

Сокращённые Операторы Присвоения
Сокращённый оператор    Значение    
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

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

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

Операторы Сравнения

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

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

Булево значение возвращается как результат сравнения.

В таблице дано резюме по операторам сравнения.

Таблица. Операторы Сравнения
ОператорОписание
Равно (==)Возвращает true, если операнды равны. Если операнды имеют разные типы, JavaScript пытается конвертировать операнды в подходящий тип для выполнения сравнения.
Не равно (!=) Возвращает true, если операнды не равны. Если операнды имеют разные типы, JavaScript пытается конвертировать операнды в подходящий тип для выполнения сравнения.
Строго равно (===) Возвращает true, если операнды равны и одного типа.
Строго не равно (!==) Возвращает true, если операнды не равны и/или разных типов.
Больше (>)                       Возвращает true, если левый операнд больше правого.
Больше или равно (>=) Возвращает true, если левый операнд больше правого или равен ему.
Меньше (<) Возвращает true, если левый операнд меньше правого.
Меньше или равно (<=) Возвращает true, если левый операнд меньше правого или равен ему.

Использование Операторов Равенства

Стандартные операторы равенства (== и !=) сравнивают два операнда без учёта типа. Операторы строгого равенства (=== и !==) выполняют сравнение операндов одного типа. Используйте операторы строгого равенства если операнды и значения обязаны иметь специфический тип, а также если имеет значение определённый тип операндов. Иначе используйте стандартные операторы равенства, которые дают возможность сравнивать два операнда, даже если они имеют разные типы.

Если необходима конвертация типов, JavaScript конвертирует операнды String, Number, Boolean или Object так:

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

?: (Условный оператор)


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

Синтаксис

condition ? expr1 : expr2

Параметры

condition
Выражение, вычисляемое в true или false.
expr1, expr2
Выражения со значениями любого типа.

Возвращаемое значение

Если condition равно true, оператор возвращает значение expr1; иначе она возвращает значение expr2.

Примеры

Для вывода различных сообщений на основе значения переменной isMember Вы можете использовать такой оператор:

alert ("The fee is " + (isMember ? "$2.00" : "$10.00"));  //$10.00
var isMember = true;

alert ("The fee is " + (isMember ? "$2.00" : "$10.00"));  //$2.00

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


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

Синтаксис

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])

Аксессоры


Предоставляют доступ к свойствам объекта.

Объект представляет собой обычный ассоциативный массив (словарь, хэш). Ключами этого массива являются имена свойств и методов (свойств, являющихся ссылкой на функцию).

Есть два способа доступа к свойствам: запись с точкой или с квадратными скобками.

Запись с точкой

get = object.property  // получить свойство property
object.property = set  // записать свойство property

Для записи с точкой название свойства должно быть правильным javascript-идентификатором, то есть последовательностью английских букв и цифр, включая подчеркивание "_" и знак доллара "$", которая не начинается с числа.
Например, object.$1 - корректный идентификатор, а object.1 - нет.

document.createElement('pre')

В этом примере из объекта document получено свойство createElement, которое является ссылкой на функцию. Эта функция вызвана с аргументом 'pre' в контексте объекта document.

Запись с квадратными скобками

get = object[property_name]   // получить
object[property_name] = set   // записать

Здесь property_name - строка. Она не обязательна является правильным идентификатором. Может быть любое значение, включая цифры и даже " " (пробел).

document['createElement']('pre')

Этот пример делает в точности то же самое, что и аналогичный предыдущий.

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

В старых javascript-скриптах иногда используется доступ к свойствам объекта через eval, в то время как гораздо быстрее и правильнее использовать запись с квадратными скобками.

Например, часто попадается такая запись:

x = eval('document.form_name.' + strFormControl + '.value')

Следует максимально избегать вызова eval. Лучше использовать скобочную запись:

x = document.form_name[strFormControl].value

delete


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

Синтаксис

delete objectName
delete objectName.property
delete objectName[index]
delete property

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

Параметры

objectName
Имя объекта.
property
Удаляемое свойство.
index
Целое число - индекс массива.

Комментарии

Можно использовать оператор 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) { // этот участок кода будет выполняться }

in


Оператор in возвращает true, только если данное свойство присутствует в объекте или его прототипе.

Синтаксис

prop in object

Параметры

prop
Строка или числовое выражение, являющееся именем свойства или индексом массива
object
Объект для поиска в нем свойства или массив - для проверки индекса

Примеры

obj = {
  a: 5
}

"a" in obj // true
"b" in obj // false
"toString" in obj // true, т.к toString есть в прототипе

Следующий пример иллюстрирует проверку индекса в массиве:

arr = [ "a", "b", "c"]

1 in arr // true
22 in arr // false

delete arr[1]
1 in arr // false : элемент удален

Справа от оператора in должен находится объект, иначе интерпретатор сгенерирует ошибку TypeError.

'a' in "test" // TypeError

instanceof


Оператор instanceof используется для проверки, принадлежит ли объект данному типу

Синтаксис

var isInstance = object instanceof ObjectType

Параметры

object
object
objectType
Конструктор(тип) для сравнения

Описание, комментарии, примеры

В левой части оператора instanceof указывается проверяемый объект, а с правой - функция-конструктор для проверки.

var theDay = new Date(2009, 11, 17);
if (theDay instanceof Date) {
  alert("Объект класса Date")
  // ...
}

Оператор instanceof учитывает наследование.

Следующий пример демонстрирует, что объекты String и Date принадлежат типу Object.

var myString = new String()
var 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

То же верно и для типов, объявленных пользователем.

Например, в следующем примере объект типа Honda также принадлежит Car и Object.

function Car(model) {
  this.model = model
}
function Honda(model) {
  this.model = model
  this.isHonda = true
}
Honda.prototype = new Car()

honda = new Honda("Accord")

honda instanceof Honda  // true
honda instanceof Car    // **true**
honda instanceof Object // true

honda instanceof Date   // false

new


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

Синтаксис

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

Параметры

objectName
Имя нового экземпляра объекта.
objectType
Тип объекта. Должна существовать функция, определяющая тип объекта.
param1...paramN

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

Комментарии

Оператор new создает новый объект, используя функцию-конструктор, которая может быть как встроенной в javascript (Date, String), так и определенной пользователем.

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

  1. Объявить функцию-конструктор
  2. Инстанциировать (сделать экземпляр объекта) вызовом new

После создания вы можете добавить к объекту любые свойства и удалить - почти любые, кроме ряда свойств встроенных javascript-объектов.

Оператор new также задает прототип объекта равным свойству prototype функции-конструктора.

Примеры

Пример 1: Тип объекта и экземпляр объекта.
      Предположим, вы хотите создать тип объекта для автомобилей/cars. Вы хотите, чтобы этот тип назывался 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 в качестве параметров для свойства owner. Чтобы найти имя owner/владельца машины car2, Вы можете получить доступ к следующему свойству:

car2.owner.name

this


Ключевое слово this возвращает ссылку на объект, являющийся текущим контекстом вызова. Это позволяет обращаться к свойствам "текущего" объекта: this.property.

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

Есть четыре различных варианта его передачи.

ТипСпособthis
неявно, через вызов методаobject.method(...)object
явно, через callfunction.call(object,...)object
явно, через applyfunction.apply(object,...)object
неявно, через вызов newnew constructor(...)новый, создаваемый объект

Если ни один из этих способов не задействован, то this указывает на глобальный объект: в браузере это window.

Это происходит при вызове функции без объекта: myFunc(params).

При манипуляциях с DOM при помощи javascript, this обычно используется для работы с событиями. При этом значение this указывает на текущий DOM-элемент, в контексте которого вызван обработчик.

Привязка методов

Так как this не привязано жестко к объекту, то можно привязывать один и тот же метод к любым классам.

walk = function() { this.isWalking = true }

function Bird() { ... }
function Rabbit() { ... }

Bird.prototype.walk = Rabbit.prototype.walk = walk

new Bird().walk()    // в обоих случаях
new Rabbit().walk()  // this будет указывать на текущий объект

Пример

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

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)">

typeof


Вызов typeof возвращает строку, содержащую информацию о типе операнда.

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

typeof operand
typeof (operand)

Эти формы идентичны: можно использовать скобки, а можно и не использовать - работает одинаково.

Оператор возвращает тип в виде строки, например:

var a = 5
alert(typeof a) // "number"

var a = 'test'
alert(typeof a) // "string"

Тип typeof возвращается, исходя из следующей таблицы соответствия типам javascript:

ТипРезультат
Undefined"undefined"
Null"object"
Boolean"boolean"
Number"number"
String"string"
Function"function"
Любой другой объект"object"

Часто возникают вопросы - почему и зачем таблица именно такая? Ответ простой: потому что так получилось по ходу развития javascript.

В старом javascript-коде можно увидеть применение typeof для проверки существования переменной:

if (typeof(var) == "undefined") { ... }

В современном javascript лучше писать:

if (window.var !== undefined) { ... }

// или, зачастую, подойдет и просто:

if (window.var) { ... }

P.S. Использовать просто if(var) нельзя, так как доступ к неопределенной переменной вызовет ошибку. Ну а обращение к отсутствующему свойству глобального объекта window всего лишь вернет undefined

Кроме того, оператор typeof используется для полиморфизма. Например, следующая функция получает узел DOM или ID узла и в обоих случаях корректно прячет узел.

function hideNode(node) {
  if (typeof node == 'string') {
    node = document.getElementById(node)
  }
  node.style.display = 'none'
}

void


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

void (expression)
void expression

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

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