JavaScript表达式与操作符
什么是表达式和运算符
- 例如:5 + 3就是一个表达式,5和3是操作数,+是运算符;
- 表达式种类有:算术、关系、逻辑、赋值和综合表达式
算术表达式
算术运算符
| 意义 | 运算符 |
|---|---|
| 加 | + |
| 减 | - |
| 乘 | * |
| 除 | / |
| 取余 | % |
加减乘除加减的符号和数学一致,乘法是*号,除法是/号 默认情况,乘除法的优先级要高于加法和减法;必要时 可以使用圆括号来改变运算的顺序
加号的两种作用
-
加号有“加法”和“连字符”两种作用
-
如果加号两边的操作数都是数字,则为“加法”,否则 为连字符
1 + 2 // 31 + '2'; // '12''1' + '2'; // '12'
取余运算
-
取余运算也叫作“求模运算”,用百分号“%”表示
-
a % b表示求a除以b的余数,它不关心整数部分,只关 心余数
11 % 4; //3,因为11除以4余数是320 % 6; //2,因为20除以6余数是212 % 3; //0,因为能够整除,余数是09 % 3; //0,因为能够整除,余数是03 % 9; //3,因为商0,余数是3
隐式类型转换
-
如果参与数学运算的某操作数不是数字型,那么JavaScript 会自动将此操作数转换为数字型
3 * '4' //12 -
隐式转换的本质是内部调用Number()函数
true + true //2false + 2 //23 * '2天' //NaN
有关IEEE754
-
在JavaScript中,有些小数的数学运算不是很精准
0.1 + 0.2 // 0.30000000000000004 -
JavaScript使用了IEEE754二进制浮点数算术标准,这会使 一些个别的小数运算产生“丢失精度”问题
-
解决办法:在进行小数运算时,要调用数字的toFixed()方法 保留指定的小数位数
幂和开根号
-
JavaScript中没有提供幂计算、开根号的运算符。需要使用 Math对象的相关方法进行计算。
Math.pow(2, 3) // 8Math.pow(3, 2) // 9Math.sqrt(81) // 9Math.sqrt(-81) // NaN
向上取整和向下取整
-
Math.ceil() 向上取整; Math.floor()向下取整
Math.ceil(2.4) // 3Math.floor(2.4) // 2Math.ceil(-2.4) // -2Math.floor(-2.4) // -3Math.ceil(2) // 2Math.floor(2) // 2
关系表达式
关系运算符
| 意义 | 运算符 |
|---|---|
| 大于 | > |
| 小于 | < |
| 大于或等于 | >= |
| 小于或等于 | <= |
| 等于 | == |
| 不等于 | != |
| 全等于 | === |
| 不全等于 | !== |
大于和小于
-
大于>、小于<两个符号和数学相同
-
“大于等于”运算符是>= ,“小于等于”运算符是<=
8 > 5 // true7 < 4 // false8 >= 7 // true8 >= 8 // true8 <= 8 // true8 <= 11 // true
判断是否相等
-
如果想比较两个值是否相等,此时应该使用==运算符
-
JavaScript中等号=表示赋值,而并不是相等。判断相等应 该使用==运算符
3 == 3 // true3 === 3 // true3 = 3 // 错误语句
相等和全等
-
两个等号==运算符不比较值的类型,它会进行隐式转换后 比较值是否相等
-
三个等号===运算符,不仅比较值是否相同,也比较类型 是否相同
5 == '5'; // true5 === '5'; // false示例:
1 == true // true1 === true // false0 == false // true0 === false // false0 == undefined // false0 === undefined // falseundefined == null // trueundefined === null // false
NaN不自等
-
NaN作为一个特殊的数字类型值,它在用==比较的时候也 有特殊的结果
NaN == NaN // falseNaN === NaN // false
如何判断某变量值为NaN
-
isNaN()函数可以用来判断变量值是否为NaN
isNaN(NaN) // trueisNaN(5) // false -
但isNaN()也不好用,它的机理是:只要该变量传入 Number()的执行结果是NaN,则isNaN()函数都会得到true
isNaN(undefined) // trueisNaN('3天') // trueisNaN(null) // false
特殊值的相等关系
null == undefined // truenull == 0 // falseNaN == NaN // false不相等和不全等
-
!=表示不相等,!==表示不全等
5 != 6 // true5 !== 6 // true5 !='5' // false5 !== '5' // true
JS中没有连比
-
判断变量a是不是介于3到15之间,应该怎么写呢?
错误示范:
3 <= a <= 15正确示范:使用逻辑运算符
3 <= a && a<= 15a 大于等于3 ,并且a小于等于15
逻辑表达式
逻辑运算符:
| 意义 | 运算符 |
|---|---|
| 非 | ! |
| 与 | && |
| 或 | || |
非运算
-
!表示“非”,也可以称为“置反运算”
-
!是一个“单目运算符”,只需要一个操作数
-
置反运算的结果一定是布尔值
!true // false!false // true!!true // true!0 // true!undefined // true!'' // true!'imooc' // false!!0 // false!!'' // false!!'imooc' // true
与运算
-
&&表示“并且”,称为“与运算”,口诀:都真才真
true && true // truetrue && false // falsefalse && true // falsefalse && false // false
或运算
-
||表示“或者”,称为“或运算”,口诀:有真就真
true || true //truetrue || false //truefalse || true //truefalse || false //false
短路计算
思考以下计算会得出什么?
3 && 63为真,6也为真,&&表示“并且”,称为“与运算”,口诀:都真才真,起到最终决定的是后面的6,所以最终输出6
- a && b运算中:a真,表达式值为b;a假,表达式值为a
再来看看以下例子:
3 && 6 // 6undefined && 15 // undefined15 && undefined // undefinednull && 2 // null'' && 16 // ''NaN && undefined // NaN那如果换成以下会什么结果
3 || 63为真,不用看后面的6,最终输出3,||表示“或者”,称为“或运算”,口诀:有真就真
再来看看以下例子:
3 || 6 // 30 || 6 // 6null || undefined // undefined'a' || 'b' // 'a'NaN || null // null- 不需要背诵和记忆规律,遇见题目只需要“现场分析”即 可
逻辑运算顺序
-
逻辑运算的优先级是:非 → 与 → 或
!true || true // true3 && 4 || 5 && 6 // 4
赋值表达式
赋值运算符
| 意义 | 运算符 |
|---|---|
| 赋值 | = |
| 快捷赋值 | %=、/=、*=、-=、+= |
| 自增运算 | ++ |
| 自减运算 | -- |
- JS中,=表示赋值,==判断是否相等(不判断类型),===判 断是否全等
- 赋值运算符会将等号右边的数值,赋予等号左边的变量
赋值运算也产生值
-
赋值运算也产生值,等号后面的值将作为“赋值运算的值”
var a;console.log(a = 4); // 4 -
这就意味着,可以连续使用赋值运算符
var a, b, c;a = b = c = 15;console.log(a); // 15console.log(b); // 15console.log(c); // 15
快捷赋值
-
快捷赋值运算符表示在原数值基础上进一步进行运算
var a = 3;a += 5; // 等价于a = a + 5console.log(a); // 8var b = 14;b /= 2; // 等价于b = b / 2console.log(b); // 7var c = 16;c %= 3; // 等价于c = c % 3console.log(c); // 1
自增/自减运算符
-
++和—是自增/自减运算符,表示在自身基础上加1或减1
var a = 3;a++;console.log(a); // 4
a++和++a的区别
-
a++ 先用再加; ++a 先加再用
var a = 3;var b = a++;console.log(b); // 3console.log(a); // 4var a = 3;var b = ++a;console.log(b); // 4console.log(a); // 4
综合表达式
运算顺序: 非运算 → 数学运算 → 关系运算 → 逻辑运算
5 < 3 + 3 // true3 > 2 && 8 > 3 + 4 // true3 > 2 && 8 > 3 + 5 // false!13 < 5 - 3 // true!13 < 5 - 5 // false变量的范围表示
5 <= a <= 12//❌a >= 5 && a <= 12//✔文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!














