Yanar da Yawon Tsarin kan 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。该运算符通常用于避免输出不应该输出的值,例如,从 HTML 的 元素调用 JavaScript 函数时。要正确做到这一点,函数不能返回有效值,否则浏览器将清空页面,只显示函数的结果。例如:

Click me

如果把这行代码放入 HTML 页面,点击其中的链接,即可看到屏幕上显示 "[object]"。TIY

这是因为 window.open() 方法返回了新打开的窗口的引用。然后该对象将被转换成要显示的字符串。

要避免这种效果,可以用 void 运算符调用 window.open() 函数:

Click me

这使 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;		//tasi "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++;	//tasi "22"
var iNum4 = iNum1 + iNum2;		//tasi "22"

In the previous code, iNum3 is equal to 22 because the expression to be calculated is 2 + 20. Variable iNum4 is also equal to 22, but it calculates 1 + 21 because the increment and decrement operations occur after assigning the value to iNum3.

Unary Plus and Unary Minus

Most people are familiar with unary plus and unary minus, their usage in ECMAScript is the same as what you learned in high school mathematics.

Unary plus has no effect on numbers in essence:

var iNum = 20;
iNum = +iNum;
alert(iNum); // Outputs "20"

This code applies unary plus to the number 20 and returns 20.

Although unary plus has no effect on numbers, it has interesting effects on strings, converting them to numbers.

var sNum = "20";
alert(typeof sNum); // Outputs "string"
var iNum = +sNum;
alert(typeof iNum); // Outputs "number"

This code converts the string "20" to a real number. When the unary plus operator operates on a string, it calculates the string in a way similar to parseInt(), the main difference being that only strings starting with "0x" (representing hexadecimal numbers) can be converted to decimal values by unary operators. Therefore, using unary plus to convert "010", the result is always 10, while "0xB" will be converted to 11.

On the other hand, unary minus is simply negating a number (for example, converting 20 to -20):

var iNum = 20;
iNum = -iNum;
alert(iNum); // Outputs "-20"

Similar to the unary plus operator, the unary minus operator will also convert a string to an approximate number and also negate the value. For example:

var sNum = "20";
alert(typeof sNum); // Outputs "string"
var iNum = -sNum;
alert(iNum); // Outputs "-20"
alert(typeof iNum); // Outputs "number"

In the above code, the unary minus operator will convert the string "-20" to -20 (the unary minus operator handles hexadecimal and decimal values in the same way as the unary plus operator, but it also negates the value).