JS基础-表达式和运算符

表达式:是由操作数和运算符(可选)构成的并产生运算结果的语法结构。例如: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

总结

特别注意 表示式组合当中,比较复杂的表达式,一定要加上括号,方便以后阅读理解