# 表达式和运算符
表达式:是由操作数和运算符(可选)构成的并产生运算结果的语法结构。例如:3+5
运算符:进行计算或者逻辑运算的符号,比如表达式中的 + 号
表达式分类:算术、关系、逻辑、赋值、组合
# 算术运算符
以下符号都是算数运算符,运算符的关键词就是运算
意义 | 运算符 |
---|---|
加 | + |
减 | - |
乘 | * |
除 | / |
取余 | % |
在算数表达式中, 乘法和除法的优先级要高于加法和减法;
不过可以使用括号来改变运算的顺序
1 + 1 = 2
// 1 + 2 先于 乘4 运算 , 括号改变了又相继
(1+2) * 4 = 12
// 取余操作,只关注余数
11 % 3 = 2
// 能够除尽的,余数是0
9 % 3 = 0 ;
隐式类型转换
- 如果参与数学运算的操作数不是数字类型,那么JS会自动将操作数转成数字型,。
- 隐式转换的本质是内部调用Number() 函数
- 号比较特殊, 如果 是 数字 和 字符串 相加 表示连接,并不会发生隐式类型转换
// 除了加号外都可以用隐式类型转换, 因为 加号 会代表 连接符
3 * '4' = 12
// + 表示连接符,而非 运算符
3 + '4' = '34';
小数运算
在JS中,有些小数运算不是很精确,会有一些精度损失
在进行小数运算的时候,要调用 toFixed() 方法保留指定的小数位数
0.1 + 0.33 // 输出 0.43000000000000005
// 使用 toFixed正确输出
Number(0.1 + 0.33).toFixed(2)
其他相关运算
幂运算
- 使用Math.pow() 函数进行幂运算
- 使用Math.sqrt() 函数进行开根号
// 计算2的3次方
Math.pow(2,3);
// 9 开根号
Math.sqrt(9)
向上取整和向下取整
- 使用函数 Math.ceil() 向上取整
- 使用函数 Math.floor() 向下取整
Math.ceil(2.3) // 输出3
Math.floor(2.3) // 输出2
Math.ceil(-2.3) // 输出 -2
Math.floor(-2.3) // 输出 -3
# 关系运算符
以下的符号都是关系运算符, 关系运算符的关键词就是比较
意义 | 运算符 |
---|---|
大于 | > |
小于 | < |
大于或等于 | >= |
小于或等于 | <= |
等于 | = |
不等于 | != |
全等于 | === |
不全等于 | !== |
# == 和 === 的区别
== 双等运算符不比较值的类型,它会进行隐式类型转换后比较值是否相等
=== 三等运算符不仅比较值是否相同,也比较类型是否相同
特殊值比较
// 输出true。
undefined == null ;
// 输出false。 因为类型不同,null 的类型为 object, undefined 类型为 undefined 。所以不相等
undefined === null ;
// 输出 false。 NaN不自等
NaN == NaN ;
isNaN 函数
可以判断是不是一个数字
// 输出 true
isNaN(NaN);
// 输出false
isNaN(5);
isNaN 传入 NaN 或者其他数字类型的值判断比较准确,除了数字类型外的其他类型值判断不准
isNaN(undefined); // true
isNaN('3天'); // true
isNaN(null); // false
# 逻辑运算符
以下的符号都是逻辑运算符, 逻辑运算符的关键词就是真假。其运算的结果 要么 是 真(true) 要么是假(false)
意义 | 运算符 | 解释 | 举例 |
---|---|---|---|
非 | ! | 表示 非 也可以说是 置反运算, 其结果一定一个bool值 | !true = false |
与 | && | 表示 并且 ,多个条件都为真才真,口诀: 一假则假 。 具有短路功能 | true && true = true |
或 |
逻辑运算符可以比较任意值,不过输出结果只能为 布尔值
非表示取反的意思
//false
!true ;
// true
!false;
// true
!0
// true
!undefined
!'' // true
!'halouworld' //非空字符串取反 为 false
与
与表示有多个并列条件,只有都满足的时候才会向下执行,否则跳过。通常和 后面讲到的 IF 配合使用
使用口诀:一假则假
<script>
var a = 1, b = 2, c=3, d=4;
// a 虽然和b 相等, 但是 c和d不相等,所以结果还是不想等
if( a== b && c==d) {
console.log('都成立')
} else {
console.log('都不成立')
}
</script>
或
或表示有多个并列条件,只要其中一个满足就会向下执行,否则跳过。通常和 后面讲到的 IF 配合使用
使用口诀:一真则真
<script>
var a = 1, b = 1, c=3, d=4;
// a == b 后者 c==d 只要有个一个相同就相等, 结果输出相等
if( a== b || c==d) {
console.log('成立')
} else {
console.log('不成立')
}
</script>
短路
短路就是 在一组 与 或者 或 当中 ,如果提前运算出了结果, 就结束了, 后面的表达式则不会被执行
- 与 1!=1 && 1=2 , 当前面的表达式 1 != 1 为假, 所以整个表达式结果为假, 后面的 1=2 则不会被执行到, 参考口诀 一假则假
- 或 1==1 || 1==2 , 当前面的表示式 1==1 为真,所以整个表示式结果为真, 后面的 1==2 则不会被执行到, 参考口诀 一真则真
# 赋值运算符
以下的符号都是赋值运算符, 赋值运算符的关键词就是赋值。即符号右边的值赋值给左边
符号 | 意义 | 举例 |
---|---|---|
= | 赋值 | a = 10 |
+= | 左右相加并赋值给左边 | a = 10 ; b = 10 ;a +=b |
-= | 左边减右边并赋值给左边 | a -= b |
*= | 左右相乘并赋值给左边 | a *= b |
/= | 左边除以右边并赋值给左边 | a /= b |
%/ | 左边取余右边并赋值给左边 | a %= b |
++ | 自增运算(自身增1) | a++ ; ++a |
-- | 自减运算 (自身减1) | a--; --a; |
赋值运算符就是将右边的赋值给左边
# 左边的值赋值给右边的变量
a = 1;
# 连续赋值
var a,b,c;
a = b = c = 1;
console.log(a);
console.log(b);
console.log(c);
+= 等举例
// 等价于 a = a + 5;
a += 5;
# 表达式组合
由运算符和操作数共同组成的复杂运算表达式
其中的运算顺序(优先级)
非运算 -> 数学运算 -> 关系运算 -> 逻辑运算
举例
// 输出true
5 < 3 + 3;
// 输出 true ,这种复杂的表达式在不加括号的时候看着比较乱
3 > 2 && 8 > 3+ 4
// !13 = false , 等价于 !Boolean(13)
// 输出 true, 小于号左边为false, 转成整数值 Number(false) = 0 和 右边的运算结果 3 相比较
!13 < 6 - 3
# 总结
特别注意 表示式组合当中,比较复杂的表达式,一定要加上括号,方便以后阅读理解