Унарные операторы ECMAScript

Унарные операторы имеют один параметр, то есть объект или значение, на котором они действуют. Это одни из самых простых операторов в ECMAScript.

delete

Оператор delete удаляет ссылку на ранее определенный объект или метод. Например:

var o = new Object;
o.name = "David";
alert(o.name); // Вывод "David"
delete o.name;
alert(o.name);	//вывод "undefined"

В этом примере удаление свойства name означает принудительное解除 ссылки на него, установку его в undefined (т.е. создание неинициализированной переменной).

Оператор delete не может удалить свойства и методы, не определенные разработчиком. Например,下面的 код вызовет ошибку:

delete o.toString;

Даже если toString - это действительное имя метода, эта строка кода вызовет ошибку, потому что метод toString() является исходным методом ECMAScript и не определен разработчиком.

void

Оператор void возвращает undefined для любого значения. Этот оператор обычно используется для предотвращения вывода значений, которые не должны выводиться, например, при вызове JavaScript-функции из элемента HTML <a>. Чтобы это сделать правильно, функция не должна возвращать действительное значение, в противном случае браузер очистит страницу и отобразит результат функции.

<a href="javascript:window.open('about:blank')">Нажми меня</a>

Если поместить эту строку кода в HTML-страницу и щелкнуть по ссылке, можно увидеть, что на экране отображается "[object]".TIY

Это связано с тем, что метод window.open() возвращает ссылку на новое открытое окно. Затем этот объект преобразуется в строку, которую нужно отобразить.

Чтобы избежать этого эффекта, можно вызвать функцию window.open() с помощью оператора void:

<a href="javascript:void(window.open('about:blank'))">Нажми меня</a>

Это делает вызов window.open() возвращать undefined, что не является действительным значением и не будет отображаться в браузере.

Совет:Помните, что функции, которые не возвращают значения, на самом деле возвращают undefined.

Префиксные/префиксные операторы

Два оператора, заимствованные напрямую из C (и Java), - это префиксные операторы инкремента и декремента.

Префиксный оператор инкремента добавляет 1 к значению, его форма -放置 два плюса(++) перед переменной:

var iNum = 10;
++iNum;

Вторая строка кода увеличивает iNum до 11, что эквивалентно:

var iNum = 10;
iNum = iNum + 1;

Таким же образом, префиксный оператор декремента уменьшает значение на 1, его форма -放置两个减号(--) перед переменной:

var iNum = 10;
--iNum;

В этом примере, вторая строка кода уменьшает значение iNum до 9.

При использовании префиксных операторов要注意, операторы инкремента и декремента выполняются до вычисления выражения. Рассмотрим следующий пример:

var iNum = 10;
--iNum;
alert(iNum);	// вывод "9"
alert(--iNum);	// вывод "8"
alert(iNum);	// вывод "8"

Вторая строка кода выполняет уменьшение iNum, третья строка кода показывает результат ("9"). Четвертая строка кода снова выполняет уменьшение iNum, но на этот раз префиксное уменьшение и операция вывода出现在 в одном предложении, результат вывода составляет "8". Чтобы доказать, что все операции уменьшения выполнены, на пятой строке кода снова выводится "8".

В арифметическом выражении приоритет префиксных и постфиксных операторов одинаковый, поэтому они должны вычисляться в порядке слева направо. Например:

var iNum1 = 2;
var iNum2 = 20;
var iNum3 = --iNum1 + ++iNum2;	// равен "22"
var iNum4 = iNum1 + iNum2;		// равен "22"

В предыдущем коде iNum3 равен 22, потому что выражение должно быть вычислено как 1 + 21. Переменная iNum4 также равна 22 и также 1 + 21.

Операторы постинкремента/постуменьшения

Есть еще два оператора, заимствованные напрямую из C (и Java), то есть постинкремент и постуменьшение.

Постинкремент также добавляет 1 к значению, и его форма представлена двумя плюсомами после переменной (++):

var iNum = 10;
iNum++;

Неожиданно, постуменьшение также уменьшает значение на 1, и его форма представлена двумя минусами после переменной (--)

var iNum = 10;
iNum--;

Вторая строка кода уменьшает значение iNum до 9.

В отличие от префиксных операторов, постфиксные операторы выполняют увеличение или уменьшение после вычисления выражения, содержащего их. Рассмотрим следующий пример:

var iNum = 10;
iNum--;
alert(iNum);	// вывод "9"
alert(iNum--);	// вывод "9"
alert(iNum);	// вывод "8"

Как и в примере с префиксными операторами, вторая строка кода выполняет уменьшение iNum, третья строка кода показывает результат ("9"). Четвертая строка кода продолжает показывать значение iNum, но на этот раз оператор уменьшения применяется в одном и том же предложении. Поскольку уменьшение выполняется после вычисления выражения, это предложение показывает число "9". После выполнения пятой строки кода функция alert показывает "8", потому что между выполнением четвертой строки кода и выполнением пятой строки кода была выполнена постуменьшение.

В арифметическом выражении приоритет операторов увеличения и уменьшения одинаковый, поэтому они должны вычисляться в порядке слева направо. Например:

var iNum1 = 2;
var iNum2 = 20;
var iNum3 = iNum1-- + iNum2++;	// равен "22"
var iNum4 = iNum1 + iNum2;		// равен "22"

В предыдущем коде iNum3 равен 22, потому что выражение должно вычислить 2 + 20. Вариант iNum4 также равен 22, но он вычисляет 1 + 21, потому что операции increments и decrements происходят после присвоения значений iNum3.

Унарный плюс и унарный минус

Большинство людей знакомы с унарным плюсом и унарным минусом, их использование в ECMAScript подобно тому, как вы изучали их в старших классах школы.

Унарный плюс по сути не оказывает никакого влияния на числа:

var iNum = 20;
iNum = +iNum;
alert(iNum); // Вывод "20"

Этот код применяет унарный плюс к числу 20 и возвращает 20.

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

var sNum = "20";
alert(typeof sNum); // Вывод "string"
var iNum = +sNum;
alert(typeof iNum); // Вывод "number"

Этот код преобразует строку "20" в истинное число. Когда унарный плюс-оператор действует на строку, он обрабатывает строку так же, как и parseInt(), но главное различие в том, что унарный оператор может преобразовать строку в десятичное значение только если она начинается с "0x" (представляет шестнадцатеричное число). Поэтому "010" будет преобразовано в 10, а "0xB" будет преобразовано в 11.

С другой стороны, унарный минус это просто отрицание числа (например,转变 20 в -20):

var iNum = 20;
iNum = -iNum;
alert(iNum); // Вывод "-20"

Как и унарный плюс-оператор, унарный минус-оператор также преобразует строку в близкое значение числа, а также возвращает отрицательное значение. Например:

var sNum = "20";
alert(typeof sNum); // Вывод "string"
var iNum = -sNum;
alert(iNum); // Вывод "-20"
alert(typeof iNum); // Вывод "number"

В приведенном выше коде унарный минус-оператор преобразует строку "-20" в -20 (унарный минус-оператор обрабатывает шестнадцатеричные и десятичные значения так же, как и унарный плюс-оператор, только он также возвращает отрицательное значение).