一元运算符
delete
delete 运算符删除对以前定义的对象属性或方法的引用。例如:
var o = new Object;
o.name = "David";
alert(o.name); // 输出 "David"
delete o.name;
alert(o.name); // 输出 "undefined"
delete运算符不能删除开发者未定义的属性和方法(删除方法引发错误)。例如,下面的代码将引发错误:
delete o.toString;
<br />
void
void 运算符对任何值返回 undefined。该运算符通常用于避免输出不应该输出的值,例如,从HTML 的<a>
元素调用JavaScript函数时。要正确做到这一点,函数不能返回有效值,否则浏览器将清空页面,只显示函数的结果。例如:
<a href="javascript:window.open('about:blank')">Click me</a>
如果把这行代码放入HTML页面,点击其中的链接,即可看到屏幕上显示"[object]"。
这是因为window.open()方法返回了新打开的窗口的引用。然后该对象将被转换成要显示的字符串。
要避免这种效果,可以用void运算符调用window.open()函数:
<a href="javascript:void(window.open('about:blank'))">Click me</a>
这使window.open()调用返回undefined,它不是有效值,不会显示在浏览器窗口中。
<br />
一元加法和一元减法
一元加法本质上对数字无任何影响:
var iNum = 20;
iNum = +iNum;
alert(iNum); // 输出 "20"
尽管一元加法对数字无作用,但对字符串却有有趣的效果,会把字符串转换成数字。
var sNum = "20";
alert(typeof sNum); // 输出 "string"
var iNum = +sNum;
alert(typeof iNum); // 输出 "number"
这段代码把字符串"20"转换成真正的数字。当一元加法运算符对字符串进行操作时,它计算字符串的方式与parseInt()相似,主要的不同是可解析十六进制数,但不能解析八进制数。因此,用一元加法转换"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(一元减法运算符对十六进制和十进制的处理方式与一元加法运算符相似,只是它还会对该值求负)。
<br />
位运算符
ECMAScript整数有两种类型,即有符号整数(允许用正数和负数)和无符号整数(只允许用正数)。在ECMAScript中,所有整数字面量默认都是有符号整数。
NOT(~)
位运算 NOT 是三步的处理过程:
1.把运算数转换成32位数字
2.把二进制数转换成它的二进制反码
3.把二进制数转换成浮点数
例如:
var iNum1 = 25; // 25 等于 00000000000000000000000000011001
var iNum2 = ~iNum1; // 转换为 11111111111111111111111111100110
alert(iNum2); // 输出 "-26"
位运算NOT实质上是对数字求负,然后减 1,因此25变-26。用下面的方法也可以得到同样的方法:
var iNum1 = 25;
var iNum2 = -iNum1 -1;
alert(iNum2); // 输出 -26
<br />
AND(&)
位运算AND由和号(&)表示,直接对数字的二进制形式进行运算。它把每个数字中的数位对齐,然后用下面的规则对同一位置上的两个数位进行AND运算。
<br />
OR(|)
位运算 OR 由符号(|)表示,也是直接对数字的二进制形式进行运算。
<br />
XOR(^)
位运算 XOR 由符号(^)表示,当然,也是直接对二进制形式进行运算。
<br />
有符号左移(<<)
它把数字中的所有数位(不包含符号位)向左移动指定的数量。
例如,如果把-2左移5位,得到的是-64,而不是64。
<br />
有符号右移(>>)
它把数字中的所有数位(不包含符号位)向右移动指定的数量。
例如,如果把-64左移5位,得到的是-2,而不是134217726。
<br />
无符号右称(>>>)
它把数字中的所有数位(包含符号位)向右移动指定的数量。
例如,如果把-64左移5位,得到的是134217726,而不是-2。
<br />
逻辑运算符
Boolean 运算符有三种:NOT、AND 和 OR。
ToBoolean操作
参数类型 | 结果 |
---|---|
Undefined | false |
Null | false |
Boolean | 结果等于输入的参数(不转换) |
Number | 如果参数为 +0, -0 或 NaN,则结果为 false;否则为 true。 |
String | 如果参数为空字符串,则结果为 false;否则为 true。 |
Object | true |
<br />
NOT(!)
逻辑NOT运算符返回的一定是Boolean值。
逻辑 NOT 运算符的行为如下:
- 如果运算数是对象,返回 false
- 如果运算数是数字 0,返回 true
- 如果运算数是 0 以外的任何数字,返回 false
- 如果运算数是 null,返回 true
- 如果运算数是 NaN,返回 true
-
如果运算数是undefined,发生错误
<br />
AND(&&)
逻辑AND运算不一定返回Boolean值。
- 如果一个运算数是对象,另一个是 Boolean 值,返回该对象。
- 如果两个运算数都是对象,返回第二个对象(true时计算到最后一个并返回最后一个运算数)。
- 如果某个运算数是 null,返回 null。
- 如果某个运算数是 NaN,返回 NaN。
- 如果运算数是undefined,发生错误
与Java中的逻辑AND运算相似,ECMAScript中的逻辑AND运算也是简便运算,即如果第一个运算数决定了结果,就不再计算第二个运算数。
考虑下面的例子:
var bTrue = true;
var bResult = (bTrue && bUnknown); // 发生错误
alert(bResult); // 这一行不会执行
这段代码在进行逻辑AND运算时将引发错误,因为变量bUnknown是未定义的。变量bTrue的值为true,因为逻辑AND运算将继续计算变量bUnknown。这样做就会引发错误。
如果修改这个例子,把第一个数设为 false,那么就不会发生错误:
var bFalse = false;
var bResult = (bFalse && bUnknown);
alert(bResult); // 输出 "false"
<br />
OR(||)
逻辑OR运算不一定返回Boolean值。
- 如果一个运算数是对象,并且该对象左边的运算数值均为 false,则返回该对象(false时计算到最后一个并返回最后一个运算数)。
- 如果两个运算数都是对象,返回第一个对象(第一个为true并返回相应运算数)。
- 如果最后一个运算数是 null,并且其他运算数值均为 false,则返回 null(false时计算到最后一个并返回最后一个运算数)。
- 如果最后一个运算数是 NaN,并且其他运算数值均为 false,则返回 NaN(false时计算到最后一个并返回最后一个运算数)。
- 如果运算数是undefined,发生错误
与逻辑 AND 运算符一样,逻辑 OR 运算也是简便运算。对于逻辑 OR 运算符来说,如果第一个运算数值为 true,就不再计算第二个运算数。
<br />
乘性运算符
乘法运算符(*)
在处理特殊值时,ECMAScript 中的乘法还有一些特殊行为:
- 如果结果太大或太小,那么生成的结果是 Infinity 或 -Infinity。
- 如果某个运算数是 NaN,结果为 NaN。
- Infinity 乘以 0,结果为 NaN。
- Infinity 乘以 0 以外的任何数字,结果为 Infinity 或 -Infinity。
- Infinity 乘以 Infinity,结果为 Infinity。
<br />
除法运算符(/)
- 如果结果太大或太小,那么生成的结果是 Infinity 或 -Infinity。
- 如果某个运算数是 NaN,结果为 NaN。
- Infinity 被 Infinity 除,结果为 NaN。
- Infinity 被任何数字除,结果为 Infinity。
- 0 除一个任何非无穷大的数字,结果为 NaN。
- Infinity 被 0 以外的任何数字除,结果为 Infinity 或 -Infinity。
<br />
取模运算符(%)
对于特殊值,取模运算符也有特殊的行为:
- 如果被除数是 Infinity,或除数是 0,结果为 NaN。
- Infinity 被 Infinity 除,结果为 NaN。
- 如果除数是无穷大的数,结果为被除数。
- 如果被除数为 0,结果为 0。
<br />
加性运算符
加法运算符(+)
在处理特殊值时,ECMAScript 中的加法也有一些特殊行为:
- 某个运算数是 NaN,那么结果为 NaN。
- -Infinity 加 -Infinity,结果为 -Infinity。
- Infinity 加 -Infinity,结果为 NaN。
- +0 加 +0,结果为 +0。
- -0 加 +0,结果为 +0。
- -0 加 -0,结果为 -0。
不过,如果某个运算数是字符串,那么采用下列规则: - 如果两个运算数都是字符串,把第二个字符串连接到第一个上。
- 如果只有一个运算数是字符串,把另一个运算数转换成字符串,结果是两个字符串连接成的字符串。
例如:
var result = 5 + 5; // 两个数字
alert(result); // 输出 "10"
var result2 = 5 + "5"; // 一个数字和一个字符串
alert(result); // 输出 "55"
<br />
减法运算符(-)
在处理特殊值时,减法运算符也有一些特殊行为:
- 某个运算数是 NaN,那么结果为 NaN。
- Infinity 减 Infinity,结果为 NaN(+Infinity与-Infinity相加,结果为NaN)。
- -Infinity 减 -Infinity,结果为 NaN(+Infinity与-Infinity相加,结果为NaN)。
- Infinity 减 -Infinity,结果为 Infinity(+Infinity与+Infinity相加,结果为Infinity)。
- -Infinity 减 Infinity,结果为 -Infinity(-Infinity与-Infinity相加,结果为-Infinity)。
- +0 减 +0,结果为 +0(结果为左边运算符)。
- -0 减 -0,结果为 -0(结果为左边运算符)。
- +0 减 -0,结果为 +0(结果为左边运算符)。
- 某个运算符不是数字,那么结果为 NaN。
<br />
更多请参考:W3School