表达式:是由操作数和运算符(可选)构成的并产生运算结果的语法结构。例如: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 则不会被执行到, 参考口诀 一假则假
或 11 || 12 , 当前面的表示式 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
特别注意 表示式组合当中,比较复杂的表达式,一定要加上括号,方便以后阅读理解