第三章web前端javascript ECMAScript 运算符
Posted javaee之路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三章web前端javascript ECMAScript 运算符相关的知识,希望对你有一定的参考价值。
运算符
一、一元运算符
delete 运算符删除对以前定义的对象属性或方法的引用。例如:
var o = new Object;
o.name = "David";
alert(o.name); //输出 "David"delete o.name;
alert(o.name); //输出 "undefined"
void 运算符对任何值返回 undefined。该运算符通常用于避免输出不应该输出的值,例如,从 html 的 <a> 元素调用 javascript 函数时。要正确做到这一点,函数不能返回有效值,否则浏览器将清空页面,只显示函数的结果。例如:
<a href="javascript:window.open('about:blank')">Click me</a>
前增量/前减量运算符
所谓前增量运算符,就是数值上加 1,形式是在变量前放两个加号(++):
var iNum = 10; ++iNum;
第二行代码把 iNum 增加到了 11,它实质上等价于:
var iNum = 10; iNum = iNum + 1;
前减量运算符是从数值上减 1,形式是在变量前放两个减号(--):
var iNum = 10; --iNum;
在使用前缀式运算符时,注意增量和减量运算符都发生在计算表达式之前。考虑下面的例子
后增量/后减量运算符
后增量运算符也是给数值上加 1,形式是在变量后放两个加号(++):
var iNum = 10; iNum++;
后减量运算符也是从数值上减 1,形式为在变量后加两个减号(--):
var iNum = 10; iNum--;
一元加法和一元减法
大多数人都熟悉一元加法和一元减法,它们在 ECMAScript 中的用法与您高中数学中学到的用法相同。一元加法本质上对数字无任何影响:
var iNum = 20;
iNum = +iNum;
alert(iNum); //输出 "20"
一元减法就是对数值求负(例如把 20 转换成 -20):
var iNum = 20;
iNum = -iNum;
alert(iNum); //输出 "-20"
二、位运算符
ECMAScript 中,所有整数字面量默认都是有符号整数。使用 31 位表示整数的数值,用第 32 位表示整数的符号,0 表示正数,1 表示负数。
下图展示的是数 18 的表示法。
负数也存储为二进制代码,不过采用的形式是二进制补码。计算数字二进制补码的步骤有三步:
确定该数字的非负版本的二进制表示(例如,要计算 -18的二进制补码,首先要确定 18 的二进制表示)
求得二进制反码,即要把 0 替换为 1,把 1 替换为 0
在二进制反码上加 1
要确定 -18 的二进制表示,首先必须得到 18 的二进制表示,如下所示:
0000 0000 0000 0000 0000 0000 0001 0010
接下来,计算二进制反码,如下所示:
1111 1111 1111 1111 1111 1111 1110 1101
最后,在二进制反码上加 1,如下所示:
1111 1111 1111 1111 1111 1111 1110 1101 1 --------------------------------------- 1111 1111 1111 1111 1111 1111 1110 1110
位运算 NOT
位运算 NOT 由否定号(~)表示,位运算 NOT 是三步的处理过程:
把运算数转换成 32 位数字
把二进制数转换成它的二进制反码
把二进制数转换成浮点数
例如:
var iNum1 = 25; //25 等于 00000000000000000000000000011001var iNum2 = ~iNum1;
//转换为 11111111111111111111111111100110
alert(iNum2); //输出 "-26"
位运算 NOT 实质上是对数字求负,然后减 1,因此 25 变 -26。用下面的方法也可以得到同样的方法:
var iNum1 = 25;
var iNum2 = -iNum1 -1;
alert(iNum2); //输出 -26
位运算 AND
位运算 AND 由和号(&)表示,直接对数字的二进制形式进行运算。它把每个数字中的数位对齐,然后用下面的规则对同一位置上的两个数位进行 AND 运算:
第一个数字中的数位 | 第二个数字中的数位 | 结果 |
---|---|---|
1 | 1 | 1 |
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 0 |
例如,要对数字 25 和 3 进行 AND 运算,代码如下所示:
var iResult = 25 & 3;
alert(iResult); //输出 "1"
25 和 3 进行 AND 运算的结果是 1。为什么?分析如下:
25 = 0000 0000 0000 0000 0000 0000 0001 1001 3 = 0000 0000 0000 0000 0000 0000 0000 0011 --------------------------------------------- AND = 0000 0000 0000 0000 0000 0000 0000 0001
可以看出,在 25 和 3 中,只有一个数位(位 0)存放的都是 1,因此,其他数位生成的都是 0,所以结果为 1。
位运算 OR
位运算 OR 由符号(|)表示,也是直接对数字的二进制形式进行运算。在计算每位时,OR 运算符采用下列规则:
第一个数字中的数位 | 第二个数字中的数位 | 结果 |
---|---|---|
1 | 1 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
仍然使用 AND 运算符所用的例子,对 25 和 3 进行 OR 运算,代码如下:
var iResult = 25 | 3;
alert(iResult); //输出 "27"
25 和 3 进行 OR 运算的结果是 27:
25 = 0000 0000 0000 0000 0000 0000 0001 1001 3 = 0000 0000 0000 0000 0000 0000 0000 0011 -------------------------------------------- OR = 0000 0000 0000 0000 0000 0000 0001 1011
可以看出,在两个数字中,共有 4 个数位存放的是 1,这些数位被传递给结果。二进制代码 11011 等于 27。
位运算 XOR
位运算 XOR 由符号(^)表示,当然,也是直接对二进制形式进行运算。XOR 不同于 OR,当只有一个数位存放的是 1 时,它才返回 1。真值表如下:
第一个数字中的数位 | 第二个数字中的数位 | 结果 |
---|---|---|
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
对 25 和 3 进行 XOR 运算,代码如下:
var iResult = 25 ^ 3;
alert(iResult); //输出 "26"
25 和 3 进行 XOR 运算的结果是 26:
25 = 0000 0000 0000 0000 0000 0000 0001 1001 3 = 0000 0000 0000 0000 0000 0000 0000 0011 --------------------------------------------- XOR = 0000 0000 0000 0000 0000 0000 0001 1010
可以看出,在两个数字中,共有 4 个数位存放的是 1,这些数位被传递给结果。二进制代码 11010 等于 26。
左移运算
左移运算由两个小于号表示(<<)。它把数字中的所有数位向左移动指定的数量。例如,把数字 2(等于二进制中的 10)左移 5 位,结果为 64(等于二进制中的 1000000):
var iOld = 2; //等于二进制 10var iNew = iOld << 5; //等于二进制 1000000 十进制 64
注意:在左移数位时,数字右边多出 5 个空位。左移运算用 0 填充这些空位,使结果成为完整的 32 位数字。
三、逻辑运算符
逻辑 NOT 运算符
由感叹号(!)表示。与逻辑 OR 和逻辑 AND 运算符不同的是,逻辑 NOT 运算符返回的一定是 Boolean 值。
逻辑 NOT 运算符的行为如下:
如果运算数是对象,返回 false
如果运算数是数字 0,返回 true
如果运算数是 0 以外的任何数字,返回 false
如果运算数是 null,返回 true
如果运算数是 NaN,返回 true
如果运算数是 undefined,发生错误
通常,该运算符用于控制循环:
var bFound = false;
var i = 0;while (!bFound)
{
if (aValue[i] == vSearchValues) {
bFound = true;
} else {
i++;
}
}
逻辑 AND 运算符
在 ECMAScript 中,逻辑 AND 运算符用双和号(&&)表示:
例如:
var bTrue = true; var bFalse = false; var bResult = bTrue && bFalse;
逻辑 OR 运算符
ECMAScript 中的逻辑 OR 运算符与 Java 中的相同,都由双竖线(||)表示:
var bTrue = true; var bFalse = false; var bResult = bTrue || bFalse;
四、乘性运算符
乘法运算符
乘法运算符由星号(*)表示,用于两数相乘。
ECMAScript 中的乘法语法与 C 语言中的相同:
var iResult = 12 * 34
除法运算符
除法运算符由斜杠(/)表示,用第二个运算数除第一个运算数:
var iResult = 88 /11;
取模运算符
除法(余数)运算符由百分号(%)表示,使用方法如下:
var iResult = 26%5; //等于 1
五、 加性运算符
加法运算符
法运算符由加号(+)表示:
var iResult = 1 + 2
减法运算符
减法运算符(-),也是一个常用的运算符:
var iResult = 2 - 1;
六、关系运算符
执行的是比较运算。每个关系运算符都返回一个布尔值
常规比较方式
关系运算符小于、大于、小于等于和大于等于执行的是两个数的比较运算,比较方式与算术比较运算相同。
每个关系运算符都返回一个布尔值:
var bResult1 = 2 > 1 //true
var bResult2 = 2 < 1 //false
比较数字和字符串
另一种棘手的状况发生在比较两个字符串形式的数字时,比如:
var bResult = "25" < "3";
alert(bResult); //输出 "true"
这段代码比较的是字符串 "25" 和 "3"。两个运算数都是字符串,所以比较的是它们的字符代码("2" 的字符代码是 50,"3" 的字符代码是 51)
七、等性运算符
等号和非等号
等号由双等号(==)表示,当且仅当两个运算数相等时,它返回 true。非等号由感叹号加等号(!=)表示,当且仅当两个运算数不相等时,它返回 true。为确定两个运算数是否相等,这两个运算符都会进行类型转换
下表列出了一些特殊情况,以及它们的结果:
表达式 | 值 |
---|---|
null == undefined | true |
"NaN" == NaN | false |
5 == NaN | false |
NaN == NaN | false |
NaN != NaN | true |
false == 0 | true |
true == 1 | true |
true == 2 | false |
undefined == 0 | false |
null == 0 | false |
"5" == 5 | true |
全等号和非全等号
等号和非等号的同类运算符是全等号和非全等号。这两个运算符所做的与等号和非等号相同,只是它们在检查相等性前,不执行类型转换。
全等号由三个等号表示(===),只有在无需类型转换运算数就相等的情况下,才返回 true。
例如:
var sNum = "66"; var iNum = 66; alert(sNum == iNum); //输出 "true"alert(sNum === iNum); //输出 "false"
八、条件运算符
条件运算符是 ECMAScript 中功能最多的运算符,它的形式与 Java 中的相同。
variable = boolean_expression ? true_value : false_value;
例如:
var iMax = (iNum1 > iNum2) ? iNum1 : iNum2;
在这里例子中,iMax 将被赋予数字中的最大值。表达式声明如果 iNum1 大于 iNum2,则把 iNum1 赋予 iMax。但如果表达式为 false(即 iNum2 大于或等于 iNum1),则把 iNum2 赋予 iMax。
九、赋值运算符
简单的赋值运算符由等号(=)实现,只是把等号右边的值赋予等号左边的变量。
例如:
var iNum = 10;
十、逗号运算符
用逗号运算符可以在一条语句中执行多个运算。
例如:
var iNum1 = 1, iNum = 2, iNum3 = 3;
逗号运算符常用变量声明中。
以上是关于第三章web前端javascript ECMAScript 运算符的主要内容,如果未能解决你的问题,请参考以下文章
Web前端开发笔记——第四章 JavaScript程序设计 第三节 数据类型