JavaScript运算符

125 阅读2分钟

运算符

数学运算符也叫算术运算符,主要包括加、减、乘、除、取余(求模)。 +:求和 -:求差 *:求积 /:求商 %:取模(取余数) 开发中经常作为某个数字是否被整除

一、算数优先级

同时使用多个运算符编写程序时,会按着某种顺序先后执行,我们称为优先级。

JavaScript中 优先级越高越先被执行,优先级相同时以书从左向右执行。 (1)乘、除、取余优先级相同

(2)加、减优先级相同

(3)乘、除、取余优先级大于加、减

(4)使用 () 可以提升优先级

(5)总结: 先乘除后加减,有括号先算括号里面的

二、赋值运算符

赋值运算符:对变量进行赋值的运算符

作用:赋值运算符的出现是为了简化代码

已经学过的赋值运算符:= 将等号右边的值赋予给左边, 要求左边必须是一个变量

其他赋值运算符: ​ += ​ -= ​ *= ​ /= ​ %=

例:num = num +3 等同于 num +=3

三、一元运算符

使用一元运算符做自增运算

自增: ​ 符号:++ ​ 作用:让变量的值 +1

自减: ​ 符号:-- ​ 作用:让变量的值 -1

使用场景: ​ 经常用于计数来使用。 比如进行10次操作,用它来计算进行了多少次了

难点:i++和++i 的区别

1.都可以理解为 i = i +1

  1. 前置自增:i ++ 先自加再使用(记忆口诀:++在前 先加)

  2. 后置自增:++ i 先使用再自加(记忆口诀:++在后 后加)

4.前置自增和后置自增独立使用时二者并没有差别! ​ 一般开发中我们都是独立使用 ​ 后面 i++ 后置自增会使用相对较多

  <body>
    <script>
      let age = 10
      // age++
      // ++age
      //  ++放在变量的后面,是先使用这个变量,在下一次再使用这个变量时就已经加好了
      // console.log(age++ + 5) // 15
      // console.log(age++ + 5 + age) // 26
      // ++在变量的前面,先执行自增或自减,再使用这个变量
      // console.log(++age + 5) // 16
      // console.log(++age + 5 + age) // 27
      // console.log(++age + 5 + age++) // 27
      // console.log(++age + 5 + ++age) // 27
      // console.log(age-- + 5 + age--) // age先和5相加得15,然后age自减得9,后面的age--中的age为前面的9,然后15先和9先加得24输出,然后age再自减
      let i = 1
      console.log(i++ + ++i +i);//i++先拿i使用,得到 1 + ++i +i,然后i进行自增,i=2,然后得到1 + ++i(i=2) +i,++i是先自增再使用,++i=3=i,得到1+3+3=7.
    </script>
  </body>
四、比较运算符

1、比较运算符:

左边是否大于右边 ​ <: 左边是否小于右边 ​ =: 左边是否大于或等于右边 ​ <=: 左边是否小于或等于右边 ​ ==: 左右两边是否相等,将两边的数据进行转换为数值 ​ ===: 左右两边是否类型和值都相等 ​ !==: 左右两边是否不全等 ​ 比较结果为boolean类型,即只会得到true或false.

2、字符串比较,是比较的字符对应的ASCII码

在比较两个字符串时,先从第一个字符开始比较,如果前一个字符中的第一个字符的AsclI码值大于(或小于)后一个字符串的第一个字符的ASCII码值,则称前一个字符串大于(或小于)后一个字符串;如果两个字符串的第——个字符的Ascll码值相等,则比较第二个字符,以此类推,直到ASCII码值不相等的字符。常见字符的ASCII码值如下:空格的ASCII码值为32;数字0到9的ASCII码值分别为48到37;大写字母“A”到“Z”的ASCII码值分别为65到90;小写字母“a”到“z”的ASCII码值分别为97到到122。

3、 NaN不等于任何值,包括它本身,所以NaN与任何类型比较,结果都是false

4、数字类型与字符串的比较

在比较数字类型和字符串时,字符串会隐式转换成数字类型,若字符串本身不是数字,而是字母之类的,则会转换失败,转换成NaN,而NaN不等于任何值,包括它本身,所以NaN与任何类型比较,结果都是false

5、尽量不要比较小数,因为小数有精度问题

6、总结:= 和 == 和 === 怎么区别?

(1)= 是赋值 ​ (2)== 是判断 只要求值相等,不要求数据类型一样即可返回true ​ (3)=== 是全等 要求值和数据类型都一样返回的才是true ​ (4)开发中,请使用 ===

五、逻辑运算符
符号名称日常读法特点口诀
&&逻辑与并且符号两边都为true结果才为true一假则假
逻辑或或者符号两边有一个true就为true一真则真
!逻辑非取反true变falsefalse变true真变假,假变真

1、逻辑运算符里的短路

短路:只存在于 && 和 || 中,当满足一定条件会让右边代码不执行

符号短路条件
&&左边为false就短路
左边为true就短路

原因:通过左边能得到整个式子的结果,因此没必要再判断右边 ​ 运算结果:无论 && 还是 || ,运算结果都是最后被执行的表达式值,一般用在变量赋值

注:空字符串、undefined、0、false、NaN转换成布尔类型后,都转成false

  <body>
    <div class="box"></div>
​
    <script>
      // 短路运算:
      // &&:如果第一个表达式为假,直接返回false,如果第一个为真,才会去执行第二个,返回第二个的值
      // ||:如果第一个为真,就返回第一个值,后面的不再执行,如果第一个表达式为假,那么就执行第二个表达式,如果第二个也为假,那么就执行第三个,如果没有第三个,就为false
      // let num = 4 > 3 && 5 && 9 // 9
      // let num = 4 > 3 || 5 || 9
      // let num = 10
      // let a = num > 8 || console.log('123')
      // console.log(a) // false
      // console.log(num) // 10
    </script>
  </body>