04.运算符

运算符用来对一个或多个值进行运算并返回运算结果。比如,+就是一个运算符,用来求两个数的和。let a = 1 + 1,变量的a的值是2。

算术运算符

算术运算符用来完成算术运算,功能和数学中的算术运算符功能一致。

  • + 用于求两个数的和
  • – 用于求两个数的差
  • * 用于求两个数的积
  • / 用于求两个数的商
  • % 模运算,求两个数相除的余数
  • ** 幂运算,x的y次幂运

注意:

  • 算数运算时,除了字符串加法,其他运算操作数是非数值时,都会转换为数值然后再运算。
  • 当任意一个值和字符串做加法运算时,它会先将其他值转换为字符串,然后再做拼串操作。
  • 可以利用这一特点来完成类型转换(隐式),任意类型 + 一个空串 = String类型 其原理和String()函数相同,但用起来更方便。
字符串
//字符串加法-特殊
a = 1 + "1" // "1" + "1" = "11"
//字符串减法
a = 2 - "1" // 2 - 1 = 1
//字符串类型转换-隐式
a = 2 + "" // "2"
a = 1 + 1 // 2
a = true + false //1
a = 10 % 3 // 1
a = 2 ** 3 // 8
a = 10 / 3 //3.3333333333333335
a = 10 / 5 //2

js是一门弱类型语言,当进行运算时会通过自动的类型转换来完成运算

a = 10 - '5' //10-5
a = 10 + true //10+1
a = 5 + null //5+0
a= 6 - undefined //NaN

赋值运算符

  • = 等号
  • += a += b等价于a = a + b
  • -= a -= b等价于a = a - b
  • *= a *= b等价于a = a * b
  • /= a /= b等价于a = a / b
  • %= a %= b等价于a = a % b
  • ??=a ??=101 空赋值 
let a = 11
        a ??= 101 //a已经有值,且不为null和undefined,所以赋值无效
        console.log(a) //11

 let a = null
        a = undefined
        a ??= 101 //a为null和undefined,所以赋值有效
        console.log(a) //101

注意:使用空赋值符号对变量进行赋值时,只有变量的值为nullundefined时才会发生赋值

一元的+和-

  • + 一元的加,正号
  • – 一元的减,负号

利用js的自动类型转换原理,±号也可以用来类型转换(隐式),效果和Number()函数一样。

let a = '123'
        a = +a //number 123
        a = -a //number -123
        console.log(typeof a, a)

自增和自减

  • ++ 自增
  • -- 自减
let a = 123
            a + 10 //number 123,不赋值的情况下原数值a不会改变
            a++ //number 124,自增、自减运算符会改变原数值a
            console.log(typeof a, a)

注意:

  • 自增会使变量立刻增加1,自增分为前自增++a和后自增a++,前自增会在自增后返回新值,后自增会在自增以后返回旧值,自减同理。
  • a++++a执行的结果都是在原数值a的基础上加一,区别在于返回值不同,一个返回旧值,一个返回新值。
let a = 123
        console.log("a原来的值为:", a)//a原来的值为: 123
        let b = a++
        console.log("a自增后的值为:", a)//a自增后的值为: 124
        console.log("a++的返回值为:", b)//a++的返回值为: 123

let a = 123
            console.log("a原来的值为:", a)//a原来的值为: 123
            let b = ++a
            console.log("a自增后的值为:", a)//a自增后的值为: 124
            console.log("++a的返回值为:", b)//a++的返回值为: 124

关系运算符

  • > 大于
  • >= 大于等于
  • < 小于
  • <= 小于等于

关系运算符和后边的相等运算符都用来比较两个值的关系是否成立,关系成立时返回true,否则返回false。

注意:
  当对非数值进行关系运算时,它会先将字符串转换为数值然后再比较(前提必须有一个是数值类型)
  当关系运算符的两端是两个字符串,它不会将字符串转换为数值,
    而是逐位的比较字符的Unicode编码
    利用这个特点可以对字符串按照字母排序。
  注意比较两个字符串格式的数字时一定要进行类型转换
1 < 5 // true
1 < '5' // true
'11' < '5' // true 

比较非数值时,会先转换为数值然后比较。如果两侧的值都是字符串,则会逐位比较字符串的Unicode编码。

相等运算符

  • == 相等运算符
  • === 全等运算符
  • != 不等运算符
  • !== 不全等运算符

注意:

相等和不等运算符比较不同类型数据时,会转换为相同的类型进行比较(通常会转换为数字)。全等和不全等不会做类型转换。

null和undefined进行==比较时会返回true
NaN不和任何值相等,包括它自身
null和undefined进行===比较时会返回true
1 == '1' // true
1 === '1' // false

逻辑运算符

  • ! 逻辑非
  • && 逻辑与
  • || 逻辑或

注意:

逻辑与运算,在运算时会先检查第一个值是否是false,如果是false直接返回第一个,否则返回第二个。逻辑非正好相反,在运算时会先检查第一个值是否是true,如果是true则返回第一个,否则返回第二个。

&&逻辑与
  1. 可以对两个值进行与运算
  2. 当&&左右任意一边有false时,返回false,否则返回true
  3. 与运算时短路的与,如果第一个是false,则不看第二个值
  4. 与运算是直接找false的,如果找到false则直接返回,没有false才会返回true
  5. 对于非布尔值进行与运算,它会转换成布尔值然后运算,但是最终返回原值

  如果第一个值为false,则返回第一个值

     如果第一个值为true,则返回第二个值

| | 逻辑或
  1. 可以对两个值进行或运算
  2. 当 | | 左右任意一边有true时,返回true,否则返回false
  3. 与运算时短路的与,如果第一个是true,则不看第二个值
  4. 与运算是直接找true的,如果找到true则直接返回,没有true才会返回false
  5. 对于非布尔值进行或运算,它会转换成布尔值然后运算,但是最终返回原值

  如果第一个值为true,则返回第一个值

     如果第一个值为false,则返回第二个值

false && true // false
0 && true // 0
a = 1 && 2 // 2
true || false // true
1 || 2 // 1

条件运算符

  • condition ? exprIfTrue : exprIfFalse 三元运算符
  条件表达式 ?表达式1 :表达式2
 
posted @ 2022-10-05 19:57  莫扎特03  阅读(60)  评论(0编辑  收藏  举报