-
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;
-
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,它不是有效值,不会显示在浏览器窗口中。
-
ECMAScript 位运算符
ECMAScript 整数有两种类型,即有符号整数(允许用正数和负数)和无符号整数(只允许用正数)。在 ECMAScript 中,所有整数字面量默认都是有符号整数。
有符号整数使用 31 位表示整数的数值,用第 32 位表示整数的符号,0 表示正数,1 表示负数。数值范围从 -2147483648 到 2147483647。
var iNum = 18; alert(iNum.toString(2)); //输出 "10010"
这段代码只输出 "10010",而不是 18 的 32 位表示。其他的数位并不重要,因为仅使用前 5 位即可确定这个十进制数值。
把负整数转换成二进制字符串后,ECMAScript 并不以二进制补码的形式显示,而是用数字绝对值的标准二进制代码前面加负号的形式输出。例如:
var iNum = -18;
alert(iNum.toString(2)); //输出 "-10010
注意:所有整数字面量都默认存储为有符号整数 。只有 ECMAScript 的位运算符才能创建无符号整数 。
-
位运算 NOT(~)
位运算 NOT 是三步的处理过程:
1. 把运算数转换成 32 位数字
2. 把二进制数转换成它的二进制反码
3. 把二进制数转换成浮点数
var iNum1 = 25; //25 等于 00000000000000000000000000011001 var iNum2 = ~iNum1; //转换为 11111111111111111111111111100110 alert(iNum2); //输出 "-26"
-
逻辑 NOT 运算符(!)
与逻辑 OR 和逻辑 AND 运算符不同的是,逻辑 NOT 运算符返回的一定是 Boolean 值 。
逻辑 NOT 运算符的行为如下:
• 如果运算数是对象,返回 false
• 如果运算数是数字 0,返回 true
• 如果运算数是 0 以外的任何数字,返回 false
• 如果运算数是 null,返回 true
• 如果运算数是 NaN,返回 true
• 如果运算数是 undefined,发生错误
-
逻辑 AND 运算符(&&)
如果某个运算数不是原始的 Boolean 型值,逻辑 AND 运算并不一定返回 Boolean 值 :
• 如果一个运算数是对象,另一个是 Boolean 值,返回该对象。
• 如果两个运算数都是对象,返回第二个对象。
• 如果某个运算数是 null,返回 null。
• 如果某个运算数是 NaN,返回 NaN。
• 如果某个运算数是 undefined,发生错误。
注:如果第一个运算数是 false,那么无论第二个运算数的值是什么,结果都不可能等于 true。
-
逻辑 OR 运算符(||)
与逻辑 AND 运算符相似,如果某个运算数不是 Boolean 值,逻辑 OR 运算并不一定返回 Boolean 值 :
• 如果一个运算数是对象,另一个是 Boolean 值,返回该对象。
• 如果两个运算数都是对象,返回第一个对象。
• 如果某个运算数是 null,返回 null。
• 如果某个运算数是 NaN,返回 NaN。
• 如果某个运算数是 undefined,发生错误。
注:如果第一个运算数值为 true,就不再计算第二个运算数。
-
乘法运算符(*)
在处理特殊值时,ECMAScript 中的乘法还有一些特殊行为:
• 如果结果太大或太小,那么生成的结果是 Infinity 或 -Infinity。
• 如果某个运算数是 NaN,结果为 NaN。
• Infinity 乘以 0,结果为 NaN。
• Infinity 乘以 0 以外的任何数字,结果为 Infinity 或 -Infinity。
• Infinity 乘以 Infinity,结果为 Infinity。
-
除法运算符(/)
处理特殊值时,除法运算符也有一些特殊行为:
• 如果结果太大或太小,那么生成的结果是 Infinity 或 -Infinity。
• 如果某个运算数是 NaN,结果为 NaN。
• Infinity 被 Infinity 除,结果为 NaN。
• Infinity 被任何数字除,结果为 Infinity。
• 0 除一个任何非无穷大的数字,结果为 NaN。
• Infinity 被 0 以外的任何数字除,结果为 Infinity 或 -Infinity。
-
取模运算符(%)
于特殊值,取模运算符也有特殊的行为:
• 如果被除数是 Infinity,或除数是 0,结果为 NaN。
• Infinity 被 Infinity 除,结果为 NaN。
• 如果除数是无穷大的数,结果为被除数。
• 如果被除数为 0,结果为 0。
-
加法运算符(+)
处理特殊值时,ECMAScript 中的加法也有一些特殊行为:
• 某个运算数是 NaN,那么结果为 NaN。
• -Infinity 加 -Infinity,结果为 -Infinity。
• Infinity 加 -Infinity,结果为 NaN。
• +0 加 +0,结果为 +0。
• -0 加 +0,结果为 +0。
• -0 加 -0,结果为 -0。
不过,如果某个运算数是字符串,那么采用下列规则:
• 如果两个运算数都是字符串,把第二个字符串连接到第一个上。
• 如果只有一个运算数是字符串,把另一个运算数转换成字符串,结果是两个字符串连接成的字符串。
减法运算符(-)
处理特殊值时,减法运算符也有一些特殊行为:
• 某个运算数是 NaN,那么结果为 NaN。
• -Infinity 减 Infinity,结果为 NaN。
• -Infinity 减 -Infinity,结果为 NaN。
• Infinity 减 -Infinity,结果为 Infinity。
• -Infinity 减 Infinity,结果为 -Infinity。
• +0 减 +0,结果为 +0。
• -0 减 -0,结果为 -0。
• +0 减 -0,结果为 +0。
• 某个运算符不是数字,那么结果为 NaN。
-
关系运算符
任何包含 NaN 的关系运算符都要返回 false:
var bResult = "a" < 3; alert(bResult);//false如果一个运算数是 Boolean 值,在比较性之前,把它转换成数字值。false 转换成 0,true 为 1(true != 2)。 如果一个运算数是 Boolean 值,一个是对象,Boolean 转整型,对象先转字符串,再转数字,最后进行比较。 如果一个运算数是字符串,另一个是数字,在比较之前,要尝试把字符串转换成数字。 如果一个运算数是对象,另一个是字符串,在比较之前,要尝试把对象转换成字符串。 如果一个运算数是对象,另一个是数字,在比较之前,要尝试把对象转换成数字。
-
等性运算符
ECMAScript 提供了两套等性运算符:等号和非等号用于处理原始值,全等号和非全等号用于处理对象。
等号和非等号(==、!=)
这两个运算符都会进行类型转换。执行类型转换的规则如下:
- 如果一个运算数是 Boolean 值,在检查相等性之前,把它转换成数字值。false 转换成 0,true 为 1(true != 2)。
- 如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字。
- 如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串。
- 如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字。
在比较时,该运算符还遵守下列规则:
- 值 null 和 undefined 相等。
- 在检查相等性时,不能把 null 和 undefined 转换成其他值。
- 如果某个运算数是 NaN,等号将返回 false,非等号将返回 true。
- 如果两个运算数都是对象,那么比较的是它们的引用值。如果两个运算数指向同一对象,那么等号返回 true,否则两个运算数不等。
注: 即使两个数都是 NaN,等号仍然返回 false,因为根据规则,NaN 不等于 NaN。
全等号和非全等号(===、!==)
等号和非等号的同类运算符是全等号和非全等号。这两个运算符所做的与等号和非等号相同,只是它们在检查相等性前,不执行类型转换 。
全等号由三个等号表示(===),只有在无需类型转换运算数就相等的情况下,才返回 true 。
var sNum = "66"; var iNum = 66; alert(sNum == iNum); //输出 "true" alert(sNum === iNum); //输出 "false"
非全等号由感叹号加两个等号(!==)表示,只有在无需类型转换运算数不相等的情况下,才返回 true 。
var sNum = "66"; var iNum = 66; alert(sNum != iNum); //输出 "false" alert(sNum !== iNum); //输出 "true"
这里,第一个 alert 使用非等号,把字符串 "66" 转换成数字 66,使得它与第二个运算数 66 相等。因此,计算结果为 "false",因为两个运算数是相等的。第二个 alert 使用的非全等号。该运算是在问:"sNum" 与 "iNum" 不同吗?这个问题的答案是:是的(true),因为 sNum 是字符串,而 iNum 是数字,它们当然不同。
本文深入讲解JavaScript中的各种运算符,包括delete、void、位运算符等,并探讨它们在实际编程中的应用,帮助读者理解这些运算符如何改变程序的执行流程。
707

被折叠的 条评论
为什么被折叠?



