一、表达式和运算符
1. 表达式
- 表达式种类
- 算术、关系、逻辑、赋值、综合
二、JS
基本表达式
1. 算术运算符
意义 | 运算符 |
---|---|
加 | + |
减 | - |
乘 | * |
除 | / |
取余 | % |
加减乘除
- 加减的符号和数学一致,乘号是
*
号,除法是/
号 - 默认情况,乘除法的优先级高于加法和减法;必要时可以使用圆括号来改变运算的顺序。
- 加减的符号和数学一致,乘号是
加号的两种作用
- 加号有"加法"和"连字符"两种作用
- 如果加号两边的操作数都是数字,则为"加法",否则为连字符。
取余运算
- 取余运算也叫作“求模运算”,用百分号
%
表示 a%b
表示求a
除以b
的余数,它不关心整数部分,只关心余数js11 % 4; //3, 因为11除以4余数是3 20 % 6; //2, 因为20除以6余数是2 12 % 3; //O, 因为能够整除,余数是0 3 % 9; //3, 因为商0,余数是3
- 取余运算也叫作“求模运算”,用百分号
隐式类型转换
- 如果
参与数学运算
的某操作数不是数字型
,那么JavaScript
会自动将此操作数转换为数字型
js3 * '4' // 12
- 隐式转换的本质是内部调用
Number()
函数jsNumber(true)// ---> 1 true + true // 2 Number(false)//---> 0 false + 2 // 2 3 * '2天' // NaN
- 如果
有关IEEE754
- 在
JavaScript
中,有些小数的数学运算不是很精准js0.1 + 0.2 // 0.30000000000000004
JavaScript
使用了IEEE754
二进制浮点数算术标准,这会使一些个别的小数运算产生丢失精度
问题- 解决办法:在进行小数运算时,要调用数字的
toFixed()
方法保留指定的小数位数
- 解决办法:在进行小数运算时,要调用数字的
- 在
幂和开根号
JavaScript
中没有提供幂计算、开根号的运算符。需要使用Math
对象的相关方法进行计算。jsMath.pow(2,3) // 8 Math.pow(3,2) // 9 Math.sqrt(81) // 9 Math.sqrt(-81) // NaN
向上取整和向下取整
Math.ceil()
向上取整;Math.floor()
向下取整jsMath.ceil(2.4) // 3 Math.floor(2.4) // 2 Math.ceil(-2.4) // -2 Math.floor(-2.4) // -3 Math.ceil(2) // 2 Math.floor(2) // 2
2. 关系运算符
意义 | 运算符 |
---|---|
大于 | > |
小于 | < |
大于或等于 | >= |
小于或等于 | <= |
等于 | = |
不等于 | != |
全等于 | === |
不全等于 | !== |
大于和小于
- 大于
>
、小于<
两个符号和数学相同
- 大于
"大于等于"运算符是
>=
,"小于等于"运算符是<=
判断是否相等
- 如果想比较两个值是否相等,此时应该使用
==
运算符 JavaScript
中等号=
表示赋值,而并不是相等,判断相等应该使用==
运算符。- 相等和全等
- 两个等号
==
运算符不比较值的类型
,它会进行隐式转换后比较值是否相等 - 三个等号
===
运算符,不仅比较值是否相同,也比较类型是否相同
。js1 == true // true 1 === true // false 0 == false // true 0 === false // false 0 == undefined // false 0 === undefined // false undefined == null // true undefined === null // false
null
和undefined
用==
进行比较涉及隐式强制类型转换,ES5
规范中规定:- 如果
x
为null
,y
为undefined
,则结果为true
- 如果
x
为undefined
,y
为null
,则结果为true
- 如果
null
和undefined
用===
比较时结果为false是因为类型不同:typeof null --> object
typeof undefined --> undefined
NaN
不自等NaN
作为一个特殊的数字类型值,它在用==
比较的时候也有特殊的结果jsNaN == NaN // false NaN === NaN // false
- 如何判断某变量值为
NaN
isNaN()
函数可以用来判断变量值是否为NaN
jsisNaN(NaN) // true isNaN(5) // false
- 但
isNaN()
也不好用,它的机理是:只要该变量传入Number()
的执行结果是NaN
,则isNaN()
函数都会得到true
jsisNaN(undefined) // true isNaN('3天') // true isNaN(null) // false
- 不相等和不全等
!=
表示不相等!==
表示不全等
js5 != 6 // true 5 !== 6 // true 5 != '5' // false 5 !== '5' // true
js
中没有连比,绝对不可能存在3 <= a <= 15
- 两个等号
- 如果想比较两个值是否相等,此时应该使用
3. 逻辑运算符
非:
!
与:&&
或:||
- !表示"非",也可以称为"置反运算"
- !是一个"单目运算符",只需要一个操作数
- 置反运算的结果一定是布尔值js
!true // false !false // true !0 // true !undefined // true !'' // true !'zhangsan' // false !!true // true !!0 // false !!'' // false !!'zhangsan' // true
4. 与运算符
&&
表示"并且",称为"与运算",全真才为真
- 短路原则
a && b
运算中:a
真,表达式值为b
,a
假,表达式值为a
js3 && 6 // 6 undefined && 15 // undefined 15 && undefined // undefined null && 2 // null '' && 16 // '' NaN && undefined // NaN
5. 或运算符
||
表示"或者",称为"或运算",有真就真
a || b
运算中:a
真,表达式值为a
,a
假,表达式值为b
js3 || 6 // 3 0 || 6 // 6 null || undefined // undefined 'a' || 'b' // 'a' NaN || null // null
- 逻辑值运算js
true && true // true true && false // false false && true // false false && false // false true || true // true true || false // true false || true // true false || false // false
- 逻辑运算顺序
- 逻辑运算的优先级是:
非--> 与--> 或
js!true || true // ture 3 && 4 || 5 && 6 // 4
- 逻辑运算的优先级是:
6. 赋值表达式
意义 | 运算符 |
---|---|
赋值 | = |
| += |
-= | |
快捷赋值 | *= |
/= | |
| %= |
自增运算 | ++ |
自减运算 | -- |
JS
中,=
表示赋值,==
判断是否相等(不判断类型),===
判断是否全等。- 赋值运算符会将等号右边的数值,赋予等号左边的变量。
- 赋值运算也会产生值
- 快捷赋值
7. 自增/自减运算法
8. 综合表达式
- 运算顺序
- 变量的范围表示
9. 重点内容
- 表达式有哪几种? 每种表达式分别有哪些运算符?
- 每种表达式中运算顺序是什么?综合运算顺序是什么?
- 什么是短路计算? 3 && 11 的结果是多少? 3 || 13 呢?
- a ++ 和 ++ a 有什么区别?js
var a = 3; var b = 4; console.log(a++ + b++ + ++a + ++b); // 18