# 算术运算符

包括以下几种算术运算符。

算术运算符 描述
+ 求和(字符串拼接)
- 求差
* 求积
/ 求商
% 取模(取余数),开发中经常作为某个数字是否被整除

+ 号不光有运算的功能,还有拼接字符串的功能。

/*
	总结加号的用法
		数学运算:在数学上是加法运算,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类型,即只会得到 truefalse
  • 字符串比较,是比较的字符对应的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中优先级越高越先被执行,优先级相同时以书写顺序从左向右执行
    • 一元运算符里面的逻辑非优先级很高
    • 逻辑与比逻辑或优先级高
    • 乘、除、取余优先级相同,加、减优先级相同,且乘、除、取余优先级大于加、减
    • 使用()可以提升优先级