这部分内容主要讲解了JS中的各种运算符。主要有:算术运算符、赋值运算符、一元运算符、自增自减运算符、逻辑运算符、关系运算符、相等运算符、条件运算符、运算符的优先级以及隐式类型转换。
每个运算符都有两个功能,第一个是计算,第二个是返回计算结果(自增自减的时候需要区分)
运算符可以用来对一个或多个操作数(值)进行运算
算术运算符:
注意:
let a = 1 + 1
a = 10 - 5
a = 2 * 4
a = 10 / 5
a = 10 / 3
a = 10 / 0 // Infinity, 其他语言会报错
a = 10 ** 4
a = 9 ** 0.5 // 开方
a = 10 % 2
a = 10 % 3
a = 10 % 4
JS是一门弱类型语言,当进行运算时会通过自动的类型转换来完成运算
a = 10 - '5' // 10 - 5
a = 10 + true // 10 + 1
a = 5 + null // 5 + 0
a = 6 - undefined // 6 - NaN
计算结果
当任意一个值和字符串做加法运算时,它会先将其他值转换为字符串,然后再做拼串的操作可以利用这一特点来完成类型转换可以通过为任意类型 +
一个空串的形式来将其转换为字符串其原理和String()
函数相同,但使用起来更加简洁
let a = true
let b = String(a)
let c = a + ''
赋值运算符用来将一个值赋值给一个变量
=- 将符号右侧的值赋值给左侧的变量
??=- 空赋值- 只有当变量的值为null或undefined时才会对变量进行赋值
+=- a += n 等价于 a = a + n
-=- a -= n 等价于 a = a - n
*=- a *= n 等价于 a = a * n
/=- a /= n 等价于 a = a / n
%=- a %= n 等价于 a = a % n
**=- a **= n 等价于 a = a ** n
let a = 5 // 将右边的值 赋值 给左边的变量
let b = a // 一个变量只有在 = 左边时才是变量,在 = 右边时它是值
a = a + 11 // 大部分的运算符都不会改变变量的值,赋值运算符除外
let a = 10
let b = a++ // a的值变为11, b的值为10let c = 10
let d = ++c // c的值变为11, d的值为11let n = 5
/* 算式从左到右执行,先执行n++,此时n变为6, n++返回值为5然后执行++n,此时n变为7,++n返回值为7最终n的值为7所以下式等同于 5 + 7 + 7*/
let result = n++ + ++n + n // 最终结果为19
let a = 10
let b = a-- // a的值变为9, b的值为10let c = 10
let d = --c // c的值变为9, d的值为9
!
:逻辑非&&
: 逻辑与||
:逻辑或逻辑非的符号是英文的感叹号,不要敲成中文了
这个运算符可以对一个值进行非运算
可以对一个布尔值进行取反操作
!true // false
!false // true
如果对一个非布尔值进行取反,它会先将其转换为布尔值然后再取反,可以利用这个特点将其他类型转换为布尔值(可以使用!!m
代替Boolean(m)
)
result = true && true // true
result = true && false // false
result = false && true // false
result = false && false // falselet a = 2
result = 0 && a++ // 短路发生,第一个值为false,直接终止逻辑运算,不会运算a++
console.log(a) // 2result = true && 1 > 2 && a-- // 执行到第二项的时候就返回false,也就是说找到第一个计算结果为false就会直接停止计算后面的值
布尔值计算最终会返回原表达式的值
result = true || false // true
result = false || true // true
result = true || true // true
result = false || false // falselet a = 2
result = 1 || a++ // 短路发生,true,直接终止逻辑运算,不会运算a++
console.log(a) // 2result = false || 1 < 2 || a-- // 执行到第二项的时候就返回true,也就是说找到第一个计算结果为true就会直接停止计算后面的值
返回值的计算结果与逻辑与的返回方式相似
关系运算符:关系运算符用来检查两个值之间的关系是否成立;成立返回true,不成立返回false
>
:用来检查左值是否大于右值>=
:用来检查左值是否大于或等于右值<
:用来检查左值是否小于右值<=
:用来检查左值是否小于或等于右值注意:
let result = 10 > 5 // true
result = 5 > 5 // false
result = 5 >= 5 // trueresult = 5 < "10" // true,自动类型转换
result = "1" > false // true,自动类型转换result = "a" < "b" // true
result = "z" < "f" // false
result = "abc" < "b" // trueresult = "12" < "2" // true
result = +"12" < "2" // false,自动类型转换// 检查num是否在5和10之间
let num = 6
// result = 5 < num < 10 // 错误的写法!!!
// 对于上面这个式子会先执行 5 < num 得到结果是true
// 然后再比较true < 10,这时候会进行自动类型转换
// 将true转换为1后和10比较,也就是1<10,最终结果得到false
result = num > 5 && num < 10 // true,这个是正确写法
==
let result = 1 == 1 // true
result = 1 == 2 // false
result = 1 == '1' // true
result = true == "1" // trueresult = null == undefined // true
result = NaN == NaN // false
===
result = 1 === "1" // false
result = null === undefined // false
!=
!==
result = 1 != 1 // false
result = 1 != "1" // false
result = 1 !== "1" // true
写法:条件表达式 ? 表达式1 : 表达式2
let a = 100
let b = 200
let max = a > b ? a : b // 200
和数学一样,JS中的运算符也有优先级,比如先乘除和加减。
可以通过优先级的表格来查询运算符的优先级