# 算术运算符
包括以下几种算术运算符。
算术运算符 | 描述 |
---|---|
+ | 求和(字符串拼接) |
- | 求差 |
* | 求积 |
/ | 求商 |
% | 取模(取余数),开发中经常作为某个数字是否被整除 |
+
号不光有运算的功能,还有拼接字符串的功能。
/*
总结加号的用法
数学运算:在数学上是加法运算,number
字符串拼接:在加号两边,其中一边是字符串,那就会产生字符串拼接操作,数值类型转换为字符串类型
转换类型:类数字的前面加+号,可以转化类型
*/
// 数学运算
let num1 = 10,num2 = 20;
console.log(num1 + num2); // 30
// 字符串拼接
let str = "10";
console.log(num1 + str); //1010
// 类型转换
console.log(+"123") // 123
注意:-
*
/
%
都存在隐式转换。
# 赋值运算符
运算符 | 描述 |
---|---|
= | 赋值 |
+= | 加赋值 ( x += y ) == (x = x + y) |
-= | 减赋值 ( x -= y ) == (x = x - y) |
*= | 乘赋值 ( x *= y ) == (x = x * y) |
/= | 除赋值 ( x /= y ) == (x = x / y) |
%= | 取余赋值 ( x %= y ) == (x = x % y) |
将等号右边的值赋予给左边,要求左边必须是一个容器
let name = 'xiaosutongxue';
# 一元运算符
# 前置操作
前置操作会在表达式最先执行。
let n = 1;
++n;
console.log(n); // 2
--n;
console.log(n); // 1
let num = 17 + ++n; // 这里++n会在最先执行
console.log(num); // 19
++n 就是 n=n+1的简写形式。
# 后置操作
后置操作会在表达式最后执行。
let n = 1;
let num = 17 + n++; // 这里n++会在最后执行
console.log(num); // 18
注意:前置自增和后置自增单独使用没有区别,如果参与运算就有区别了。
- 如果++在前,会执行先自增,然后使用自增后的的值进行运算。
- 如果++在后,会使用原来的值先参与运行,然后自身在进行自增。
# 比较运算符
运算符 | 描述 |
---|---|
== | 相等(只要值一样就是true,不管数据类型,开发中不常使用) |
=== | 全等(开发常用,要求值和数据类型都一样) |
!= | 不等 |
!== | 不全等(只有在类型相同的前提下,再去比较值) |
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
下面来体验不同类型的比较结果:
let a = 1,b = 2,c = '1';
console.log(a < b); //true
console.log(a == b); //false
console.log(a == c); //true
console.log(a === c); //false
console.log(a == true); //true
console.log(a === true); //false
注意:
- 比较结果为boolean类型,即只会得到
true
或false
- 字符串比较,是比较的字符对应的ASCII码(从左往右依次比较,如果第一位一样再比较第二位,以此类推)
- NaN不等于任何值,包括它本身,因此NaN不能参与运算
- 尽量不要比较小数,因为小数有精度问题
- 不同类型之间比较会发生隐式转换,例如 3>'2' //true
- 最终把数据隐式转换成number类型再比较
- 开发中,如果进行准确的比较使用===
= 和 == 和 === 怎么区别?
- = 是赋值。
- == 是判断,只要求值相等,不要求数据类型一样即可返回true。
- === 是全等,要求值和数据类型都一样返回的才是true。
开发中,请使用 ===
比较运算符返回的结果是什么?
- 结果只有2个, true 或者 false
# toNumber()
# toPrimitive()
# 逻辑运算符
符号 | 名称 | 读法 | 口诀 |
---|---|---|---|
&& | 逻辑与(和) | 并且and | 一假则假 |
|| | 逻辑或 | 或者or | 一真则真 |
! | 逻辑非 | 取反not | 真变假,假变真 |
# 逻辑与
使用 &&
表示逻辑与,指符号两端都为 true 时表达式结果为 true。
let a = true,b = true;
if (a && b) {
console.log('表达式成立');
}
# 逻辑或
使用 ||
表示逻辑或,指符号两端有一方为 true,表达式即成立。
let a = true,b = false;
if (a || b) {
console.log('表达式成立');
}
# 逻辑非
使用 !
表示逻辑非,即原来是 true 转变为 false,反之亦然。
let a = true,b = false;
if (a && !b) {
console.log('表达式成立');
}
# 短路运算
符号 | 短路条件 |
---|---|
&& | 左边为假就短路 |
|| | 左边为真就短路 |
- 原因:通过左边能得到整个式子的结果,因此没必要再判断右边
- 运算结果:无论&&还是||,运算结果都是最后被执行的表达式值,一般用在变量赋值
# 位运算符
JavaScript也支持位运算符
位运算符 | 描述 |
---|---|
& | 与 |
| | 或 |
~ | 非 |
^ | 异或 |
<< | 左移 |
>> | 右移 |
console.log(5 & 1); // 1
console.log(5 | 1); // 5
console.log(~5); // -6
console.log(5 ^ 1); // 4
console.log(5 << 1); // 10
console.log(5 >> 1); // 2
# delete
JavaScript中支持delete运算符,可以删除对象里的属性
let obj = {
name:"xiaosutongxue",
age:27
};
delete obj.age;
console.log(obj); // { name: 'xiaosutongxue' }
# 优先级
同时使用多个运算符编写程序时,会按着某种顺序先后执行,我们称为优先级。
JavaScript中优先级越高越先被执行,优先级相同时从左向右执行。
优先级 | 运算符 | 顺序 |
---|---|---|
1 | 小括号 | ( ) |
2 | 一元运算符 | ++ -- ! |
3 | 算术运算符 | 先 * / % 后 + - |
4 | 关系运算符 | > >= < <= |
5 | 相等运算符 | == != === !== |
6 | 逻辑运算符 | 先 && 后 || |
7 | 赋值运算符 | = |
8 | 逗号运算符 | , |
- JavaScript中优先级越高越先被执行,优先级相同时以书写顺序从左向右执行
- 一元运算符里面的逻辑非优先级很高
- 逻辑与比逻辑或优先级高
- 乘、除、取余优先级相同,加、减优先级相同,且乘、除、取余优先级大于加、减
- 使用()可以提升优先级