文章教程

2.8运算符与表达式

9/17/2020 9:40:31 PM 人评论 次浏览

2.8 运算符与表达式

运算符又叫操作符,是程序处理的基本元素之一,其主要作用是操作JavaScript中的各种数据,包括变量、数组、对象、函数等。运算符是可以用来操作数据的符号,操作数是被运算符操作的数据,表达式则是JavaScript中一个有意义的语句。

依照运算符使用的操作数的个数来划分,JavaScript中有三种类型的运算符:一元运算符、二元运算符和三元运算符。

按照运算符的功能可以分为下面几种运算符:赋值运算符、算术运算符、关系运算符、位操作运算符、逻辑运算符、条件运算符、特殊运算符。

2.8.1 赋值运算符

赋值运算符是将其右边的操作数的值赋给左边的操作数。

下面通过表2-7来介绍常见的赋值运算符及其含义(设a=4,b=2)。

表2-7 常见的赋值运算符及其含义

赋值运算符 例子 含义 结果
= a=b 将b的值赋给a a=2
+= a+=b a=a+b a=6
-= a-=b a=a-b a=2
*= a*=b a=a*b a=8
/= a/=b a=a/b a=2
%= a%=b a=a%b a=0

例如:“$a-=$b”等价于“$a=$a-$b”。赋值运算符的使用可以让程序更精简,执行效率也明显提高。

2.8.2 算术运算符及其表达式

算术运算符用来处理四则运算的符号,是最简单、最常用的符号。

1.算术运算符

JavaScript提供的算术运算符有+、-、*、/、%、++、--、7种,分别表示加、减、乘、除、求余数、自增和自减。其中+、-、*、/、% 5种为二元运算符,表示对运算符左右两边的操作数作算术,其运算规则与数学中的运算规则相同,即先乘除后加减;++、--两种运算符都是一元运算符,其结合性为自右向左,在默认的情况下表示对运算符右边变量的值增1或减1,而且它们的优先级比其他算术运算符高。

2.算术表达式

由算术运算符和操作数组成的表达式称为算术表达式,其结合性为自左向右。常用的算术运算符和表达式使用说明如表2-8所示。

表2-8 算术运算符和表达式

运算符 功能 表达式 示例(假设i=1)
+ 执行加法运算(如果两个操作数是字符串,则该运算符用做字符串连接运算符,将一个字符串添加到另一个字符串的末尾) 操作数1 + 操作数2 3+2(结果:5)
'a'+14(结果:111)
'a'+ 'b'(结果为195)
'a'+"bcd"(结果:abcd)
12+"bcd"(结果:12bcd)
- 执行减法运算 操作数1-操作数2 3-2(结果:1)
* 执行乘法运算 操作数1 * 操作数2 3*2(结果:6)
/ 执行除法运算 操作数1 / 操作数2 3/2(结果:1)
% 获得进行除法运算后的余数 操作数1%操作数2 3%2(结果:1)
++ 将操作数加1 操作数++或++操作数 i++/++i(结果:1/2)
-- 将操作数减1 操作数--或—操作数 i--/--i(结果:1/0)

2.8.3 关系运算符及其表达式

关系运算实际上是逻辑运算的一种,可以把它理解为一种“判断”,判断的结果要么是“真”,要么是“假”,也就是说关系表达式的返回值总是布尔值。JavaScript中定义关系运算符的优先级低于算术运算符,高于赋值运算符。

1.关系运算符

JavaScript语言中定义的关系运算符有==(等于)、!=(不等于)、<(小于)、>(大于)、<=(小于或等于)、>=(大于或等于)6种。

提 示

关系运算符中的等于号(==)很容易与赋值号(=)混淆,一定要记住,=是赋值运算符,而==是关系运算符。

2.关系表达式

由关系运算符和操作数构成的表达式称为关系表达式。关系表达式中的操作数可以是整型数、实型数、布尔型、枚举型、字符型、引用型等。对于整数类型、实数类型和字符类型,上述6种比较运算符都可以适用;对于布尔类型和字符串的比较运算符实际上只能使用==和!=。例如:

3>2结果为true

4.5==4结果为false

'a'>'b'结果为false

true==false结果为false

"abc"=="asf"结果为false

提 示

两个字符串值都为null或两个字符串长度相同、对应的字符序列也相同的非空字符串时比较的结果才能为true。

2.8.4 位运算符及其表达式

1.位运算符

任何信息在计算机中都是以二进制的形式保存的。位运算符就是对数据按二进制位进行运算的运算符。JavaScript中的位运算符有:&与、|或、^异或、~取补、<<左移、>>右移。其中,取补运算符为一元运算符,而其他的位运算符都是二元运算符。这些运算都不会产生溢出。位运算符的操作数为整型或者是可以转换为整型的任何其他类型。

2.位运算表达式

由位运算符和操作数构成的表达式为位运算表达式。在位运算表达式中,系统首先将操作数转换为二进制数,然后再进行位运算,计算完毕后,再将其转换为十进制整数。各种位运算符及其表达式如表2-9所示。

表2-9 位运算符及其表达式

运算符 描述 表达式 结果
& 与运算。若操作数中的两个位都为1,则结果为1;若两个位中有一个为0,则结果为0 8&3 结果为8。8转换成二进制为1000,3转换成二进制为0011,与运算结果为1000,转换成十进制为8
或运算。操作数中的两个位都为0,结果为0,否则结果为0 8|3 结果为11。8转换成二进制为1000,3转换成二进制为0011,与运算结果为1011,转换成十进制为11
^ 异或运算。两个操作位相同时,结果为0,不相同时结果为1 8^3 结果为11。8转换成二进制为1000,3转换成二进制为0011,与运算结果为1011,转换成十进制为11
~ 取补运算,操作数的各个位取反,即1变为0,0变为1 ~8 结果为-9。8转换成二进制为1000,取补运算后为0111,对符号位取补后为负,转换成十进制为-9
<< 左移位。操作数按位左移,高位被丢弃,低位顺序补0 8<<2 结果为32。8转换成二进制为1000,左移两位后100000,转换成十进制为32
>> 右移位。操作数按位右移,低位被丢弃,其他各位顺序一次右移 8>>2 结果为2。8转换成二进制为1000,右移两位后10,转换成十进制为2

2.8.5 逻辑运算符及其表达式

在实际生活中,有很多条件判断语句的例子。例如,“当我放假了,并且有足够的费用,我一定去西双版纳旅游去”,这句话表明,只有同时满足放假和足够费用这两个条件,这个想法才能实现。类似这样的条件判断,在JavaScript语言中,可以采用逻辑运算符来完成。

1.逻辑运算符

JavaScript提供了&&、||、!,分别是逻辑与、逻辑或、逻辑非三种逻辑运算符。逻辑运算符要求操作数只能是布尔型。逻辑与和逻辑非都是二元运算符,要求有两个操作数,而逻辑非为一元运算符,只有一个操作数。

逻辑非运算符表示对某个布尔型操作数的值求反,即当操作数为false时运算结果返回true,当操作数为true时运算结果返回false。

逻辑与运算符表示对两个布尔型操作数进行与运算,并且仅当两个操作数均为true时,结果才为true。

逻辑或运算符表示对两个布尔型操作数进行或运算,当两个操作数中只要有一个操作数为为true时,结果就是true。

为了方便掌握逻辑运算符的使用,其运算结果可以用逻辑运算的“真值表”来表示,如表2-10所示。

表2-10 真值表

image

(续表)

image
2.逻辑表达式

由逻辑运算符和操作数组成的表达式称为逻辑表达式。逻辑表达式的结果只能是布尔型,要么是true要么是false。在逻辑表达式的求值过程中,不是所有的逻辑运算符都被执行。有时候,不需要执行所有的运算符,就可以确定逻辑表达式的结果。只有在必须执行下一个逻辑运算符后才能求出逻辑表达式的值时,才继续执行该运算符。这种情况称为逻辑表达式的“短路”。

例如,表达式a&b,其中a和b均为布尔值,系统在计算该逻辑表达式时,首先判断a的值,如果a为true,再判断b的值;如果a为false,系统不需要继续判断b的值,直接确定表达式的结果为false。

逻辑运算符通常和关系运算符配合使用,以实现判断语句。例如,要判断一个年份是否为闰年。闰年的条件是:能被4整除,但是不能被100整除,或者是能被400整除。设年份为year,闰年与否就可以用一个逻辑表达式来表示:

  (year % 400)==0 || ((year % 400)==0 && (year % 100)!=0)

逻辑表达式在实际应用中非常广泛,在后续学习的流程控制语句中的条件,都会涉及逻辑表达式的使用。

2.8.6 条件运算符及其表达式

在JavaScript中唯一的一个三元运算符“?:”,有时也称为条件运算符。由条件运算符组成的表达式称为条件表达式。一般表示形式如下:

  条件表达式?表达式1:表达式2

先计算条件,然后进行判断。如果条件表达式的结果为true,计算表达式1的值,表达式1的结果为整个条件表达式的值;否则,计算表达式2,表达式2的结果为整个条件表达式的值。

第一个操作数必须是一个可以隐式转换成bool型的常量、变量或表达式。

第二和第三个操作数控制了条件表达式的类型。它们可以是JavaScript中任意类型的表达式。

例如,实现求出a和b中最大数的表达式。

  a>b?a:b	//取a和b中的最大数

条件运算符相当于后续学习的if…else语句。

其他运算符还有很多,例如,逗号运算符、void运算符、new运算符等,在此不赘述。

2.8.7 运算符的优先级

运算符的种类非常多,通常不同的运算符又构成了不同的表达式,甚至一个表达式中又包含有多种运算符,因此它们的运算方法应该有一定的规律性。JavaScript语言规定了各类运算符的运算级别及结合性等,如表2-11所示。

表2-11 运算符的优先级

优先级(1最高) 运算符 结合性 说明
1 ( ) 从左到右 括号
2 ++/-- 从右到左 自加/自减运算符
3 * / % 从左到右 乘法运算符、除法运算符、取模运算符
4 + - 从左到右 加法运算符、减法运算符
5 < <= > >= 从左到右 小于、小于等于、大于、大于等于
6 == != 从左到右 等于、不等于
7 && 从左到右 逻辑与
8 || 从左到右 逻辑或
9 = += *= /= %= -= 从右到左 赋值运算符和快捷运算符

建议在写表达式的时候,如果无法确定运算符的有效顺序,则尽量采用括号来保证运算的顺序,这样也使得程序一目了然,而且自己在编程时能够保持思路清晰。

教程类别