表达式种类
算数、关系、逻辑、赋值、综合
算数表达式
意义 | 运算符 |
加 | + |
减 | - |
乘 | * |
除 | / |
取余 | % |
加号的两种作用
- 加法:两边的操作数都是数字;
- 连字符:有一个不是数字;
1 + 2 // 3
1 + '2' // '12'
'1' + '2' // '12'
隐式类型转换
如果参与数学运算的某操作数不是数字型,那么JS会自动将此操作符转换为数字型
3 * '4' // 12
隐式转换的本质是内部调用Number()函数;
// Number(true) ---> 1
true + true // 2
// Number(false) ---> 0
false + 2 // 2
// NaN进行任何数学运算,结果都是NaN
3 * '2天' // NaN
3 + '2天' // '32天'
3 + undefined // NaN
有关IEEE754
在JS中,由于使用了IEEE754二进制浮点数算术标准,有些个别小数的数学运算不是很精准
0.1 + 0.2 // 0.30000000000000004
解决办法:
在进行小数运算时,要调用数字的toFixed()方法保留指定的小数位数
Number(0.1 + 0.2).toFixed(2)
幂和开根号
由于JS没有提供幂计算、开根号的运算符,所以,需要使用Math对象的相关方法进行计算。
// 幂计算
Math.pow(2,3) // 8
Math.pow(3,2) // 9
// 开根号
Math.sqrt(81) // 9
Math.sqrt(-81) // NaN
向上取整和向下取整
向上取整:Math.ceil()
向下取整:Math.floor()
相等和全等
相等==运算符不比较值的类型,它会进行隐式转换后,比较值是否相等
全等===运算符,不仅比较值是否相同,也比较类型是否相同
5 == '5' // true
5 === '5' // false
undefined和null
// 由于隐式强制类型转换
undefined == null // true
// 由于类型不同
undefined === null // false
NaN不自等
NaN == NaN // false
NaN === NaN // false
isNaN()函数可以用来判断变量值是否为NaN
isNaN(NaN) //true
isNaN(5) //false
机理:
只要该变量传入Number()的执行结果是NaN,那么isNaN()函数都会得到true
isNaN(undefined) //true
isNaN('5天') //true
isNaN(null) //false
逻辑表达式
意义 | 运算符 |
非 | ! |
与 | && |
或 | || |
非运算(置反运算)
!是一个“单目运算符”,只需要一个操作数;置反运算的结果一定是布尔值;
!true // false
!false // true
!0 // true
!undefined // true
!'' // true
!'m' // false
!!true // true
!!0 // false
!!undefined // false
与运算
&&表示“并且”;都真才真
或运算
||表示“或者”;有真就真
逻辑运算顺序
优先级:非 → 与 → 或
!true || true // true
3 && 4 || 5 && 6 // 4
综合表达式
运算顺序:非运算 → 数学运算 → 关系运算 → 逻辑运算