Унарные операторы ECMAScript
- Предыдущая страница Референсные типы 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 (унарный минус-оператор обрабатывает шестнадцатеричные и десятичные значения так же, как и унарный плюс-оператор, только он также возвращает отрицательное значение).
- Предыдущая страница Референсные типы ECMAScript
- Следующая страница Битовое вычитание