目录
一、算术运算符
算术运算符用于对两个变量或值进行算术运算,与数学上的加、减、乘、除类似。
1. 常用的算术运算符
运算符 | 运算 | 示例 | 解释说明 |
+ | 加 | 1 + 5 | 6 |
- | 减 | 8 - 4 | 4 |
* | 乘 | 3 * 4 | 12 |
/ | 除 | 3 / 2 | 1.5 |
% | 取余数(取模) | 7 % 5 | 2 |
2. 算术运算符的注意事项
- 进行四则混合运算时,运算顺序要遵循数学中“先乘除后加减”的原则。
- 在进行取模运算时,运算结果的正负取决于被模数(%左边的数)的符号,与模数(%右边的数)的符号无关。
- 在开发中尽量避免利用浮点数进行运算,因为有可能会因JavaScript的精度导致结果的偏差。
- 使用“+”和“-”可以表示正数或负数。即+、-既是单目运算符又是双目运算符。
单目运算符(一元运算符):参与运算的对象只有一个,并运算符必须出现在运算对象的左边。(如+5,-6)
双目运算符(二元运算符):参与运算的对象有两个。(如a+b)
注意:
- 表达式是各种类型的数据、变量和运算符的集合,最简单的表达式可以是一个变量或字面量。
- 表达式最终都会有一个返回值。
二、递增和递减运算符
使用递增(++)、递减(--)运算符可以快速地对变量的值进行递增和递减操作,它属于一元运算符,只对一个表达式进行操作。递增和递减运算符的优先级高于“+”“-”等运算符。
1. 前置递增(递减)运算符
递增和递减运算符写在变量前面,返回的是计算后的结果。
var a = 5;
a++;
console.log(a); // 输出:6
var n=5,m=3,k;
k = ++n*m; // 先加1,后运算
console.log(n);
console.log(k); // 输出:18
2. 后置递增(递减)运算符
递增和递减运算符写在变量后面,返回的是计算前的结果。
var b = 5;
++b;
console.log(b); //输出:6
var n=5,m=3,k;
k = n++*m; // 先运算,后加1
console.log(n);
console.log(k); // 输出:15
3. 前缀和后缀的区别
- 作为独立的语句,没有区别:都是让运算对象+1。
- 若放在表达式中:前缀表达式先让变量+1,然后再使用变量的值;后缀表达式先使用变量的值,然后再让变量+1。
三、比较运算符/关系运算符
比较运算符用于对两个数据进行比较,其结果是一个布尔值,即true或false ,常用的比较运算符及用法见下表。
运算符 | 运算 | 示例 | 结果 |
> | 大于 | 5 > 5 | false |
< | 小于 | 5 < 5 | false |
>= | 大于或等于 | 5 >= 5 | true |
<= | 小于或等于 | 5 <= 5 | true |
== | 等于(只比较值) | 5 == 4 | false |
!= | 不等于(只比较值) | 5 != 4 | true |
=== | 全等(先判断类型、后判断值) | 5 === 5 | true |
!== | 不全等(类型、值) | 5 !== '5' | true |
var a = '123';
var b = 123;
console.log(a == b); // 输出:true
console.log(a === b); // 输出:false
四、逻辑运算符
逻辑运算符用于对布尔值进行运算,其返回值也是布尔值。在实际开发中,逻辑运算符经常用于多个条件的判断,常用的逻辑运算符见下表。
运算符 | 运算 | 示例 | 结果 |
&& | 与 | a && b | a和b都为true,结果为true,否则为false |
|| | 或 | a || b | a和b中至少有一个为true,结果为true,否则为false |
! | 非(取反) | !a | 单目运算符,若a为false,结果为true,否则相反 |
1. '&&'运算中的短路现象
当"表达式1"为假时,不运算"表达式2"
var a = 10, b = 5, k;
k = a>6 && (--b<3); // k所等于的第一个表达式为真,第二个表达式为假
console.log('k=', k); // 输出:false
console.log('b=', b); // 输出:4
// '&&'运算中的短路现象:当"表达式1"为假时,不运算"表达式2"
var n = 10, m = 5, z;
z = n<6 && (--m<3); // z所等于的第一个表达式为假,第二个表达式为假
console.log('z=', z); // 输出:false
console.log('m=', m); // 输出:5————因为短路了,没有运算
2. '||'运算中的短路现象
当"表达式1"为真时,不运算"表达式2"
var n = 10, m = 5, z;
z = n < 6 || (--m < 3); // z所等于的第一个表达式为假,第二个表达式为假
console.log('z=', z); // 输出:false
console.log('m=', m); // 输出:4
// '||'运算中的短路现象:当"表达式1"为真时,不运算"表达式2"
var a = 10, b = 5, k;
k = a > 6 || (--b < 3); // k所等于的第一个表达式为真,第二个表达式为假
console.log('k=', k); // 输出:true
console.log('b=', b); // 输出:5————因为短路了,没有运算
五、位运算符
用来对数据进行二进制运算,将参与运算的操作数视为由二进制(0和1)组成的32位的串。
运算符 | 运算 | 示例 | 结果 |
& | 按位'与' | a & b | a和b对应的二进制位都为1时,结果为1,否则为0 |
| | 按位'或' | a ||b | a和b对应的二进制位有一个为1时,结果为1 |
^ | 按位'异或' | a^b | 两个对应的二进制位相同为0,不同为1 |
例:按位'与'运算 按位'异或'运算
六、赋值运算符
赋值运算符用于将运算符右边的值赋给左边的变量,常用的赋值运算符及示例见下表。
运算符 | 运算 | 示例 | 结果 |
= | 赋值 | a = 3; | a = 3 |
+= | 加并赋值 | a = 3; a += 2; | a = 5 |
-+ | 减并赋值 | a = 3; a -= 2; | a = 1 |
*= | 乘并赋值 | a = 3; a *= 2; | a = 6 |
/= | 除并赋值 | a = 3; a /= 2; | a = 1.5 |
%= | 模并赋值 | a = 3; a %= 2; | a = 1 |
+= | 连接并赋值 | a = 'abc'; a += 'def'; | a = 'abcdef' |
<<= | 左移位并赋值 | a = 9; a <<= 2; | a = 36 |
>>= | 右移位并赋值 | a = -9; a >>= 2; | a = -3 |
>>>= | 无符号右移位并赋值 | a = 9; a >>>= 2; | a = 2 |
&= | 按位“与”并赋值 | a = 3; a &= 9; | a = 1 |
^= | 按位“异或”并赋值 | a = 3; a ^= 9; | a = 10 |
|= | 按位“或”并赋值 | a = 3; a |= 9; | a = 11 |
常用的赋值运算符及示例如下。
console.log(Boolean('')) // false
var age = 10;
age += 5; // 相当于age = age + 5;
console.log(age); // 输出结果:15
age -= 5; // 相当于age = age - 5;
console.log(age); // 输出结果:10
age *= 10; // 相当于age = age * 10;
console.log(age); // 输出结果:100
七、三元运算符
三元运算符是一种需要三个操作数的运算符,运算的结果根据给定条件决定。
条件表达式 ? 表达式1 : 表达式2
语法说明:先求条件表达式的值,如果为true,则返回表达式1的执行结果;如果条件表达式的值为false,则返回表达式2的执行结果。
八、运算符优先级
运算符优先级是指表达式中所有运算符参与运算的先后顺序,优先级如下表。
结合方向 | 运算符 | 结合方向 | 运算符 |
无 | () | 左 | == != === !== |
左 | . [] new(有参数,无结合性) | 左 | & |
右 | new(无参数) | 左 | ^ |
无 | ++(后置) --(后置) | 左 | | |
右 | ! ~ -(负数) +(正数) ++(前置) --(前置) typeof void delete | 左 | && |
右 | ** | 左 | || |
左 | * / % | 右 | ?: |
左 | + - | 右 | = += = *= /= %= <<= >>= >>>= &= ^= |= |
左 | << >> >>> | 左 | , |
左 | < <= > >= in instanceof |
注意:所有运算符中,单目运算符的优先级永远最高。