运算符与优先级 - JS

发布时间:2024年01月21日

常见运算符

算术运算符

  • 加法 +,如 2 + 3,注意但凡遇到字符串,则作拼接作用,如2 + '3''2' + 3'2' + '3'结果都是字符串 ‘23’;
  • 减法 -,如 2 - 3
  • 乘法 *,如 2 * 3
  • 除法 /,如 2 / 3
  • 取余 %,如 3 % 2,表示 3÷2 的余数;
  • 求幂 **,如 3 ** 2,表示 32

逻辑运算符

逻辑运算是好玩的,也是相对简单的,这里不展开叙述。

  • 与(&&
  • 或(||
  • 非(!
  • 空值合并运算符(??

位运算符

位运算不常见,一般可用于解决内存效率问题、底层运算问题、加密问题等。

  • 按位与 ( & )
  • 按位或 ( | )
  • 按位异或 ( ^ )
  • 按位非 ( ~ )
  • 左移 ( << )
  • 右移 ( >> )
  • 无符号右移 ( >>> )

比较运算符

  1. 比较的结果是布尔值 truefalse
  2. 常见的如,><<=>===
  3. 严格相等 ===,严格不相等 !==,比如 0 !== ''null !== undefined
  4. 下面展示,一些特殊类型的数据比较(如 null、字符串、布尔值、NaNundefined)。
/* 与布尔值的比较 */
0 == false == ''		// true
1 == true				// true
0 !== false				// true
/* null、NaN、undefined */
null == undefined		// true
null !== undefined		// true
null != NaN				// true
null >= 0				// true,null 包含空、无或值未定的概念
/* 下面关于 null 判断结果都是 false
null == 0、null > 0、null < 0、null <= 0
*/
NaN != NaN				// true,任何一个 NaN 实例都是独特的
undefined != 0			// true,undefined 的含义是未定义
/* 下面关于 undefined 判断结果都是 false
undefined > 0、undefined < 0、undefined == 0、undefined >= 0、undefined <= 0
*/
---------------
/* 字符串的比较:
	比较字符的码值,从左到右比较,直到比较出结果 */
'abc' > 'abCD'			// true
'abc' == 'abc'			// true

赋值运算符

  1. 简单的复制运算符,就是一个等于号,即 =
  2. 配合算术运算符,如 +=/=**= 等;
  3. 配合逻辑运算符,如 ||=??= 等;
  4. 配合位运算符,如 <<=&=等;
  5. 链式赋值,如 a = b = 2
let a = 2;
a += 1		// a=3
a ^= 0b1	// a=1

自增、自减

  1. 自增 ++,将变量与 1 相加;
  2. 自减 -- ,将变量与 1 相减;
  3. 操作数据必须是数。
let a = 100;
a ++;		// 101
a --;		// 100
'0' ++;		// Error

一元运算符、三元运算符

  1. N元运算符,表示操作数据是N个;
  2. 一元运算符:
    • +,用于将数据转换成数字
    • -,用于取一个数的负值
  3. 三元运算符:?:,等效于一个简单的条件判断语句,可以像if语句一样嵌套。
+'12'		// 12 - 数值
+''			// 0 - 数值
+true		// 1 - 数值
/* 符号函数:如果x>0,返回1,否则-1 */
function sign(x) { 
	return x > 0 ? 1: -1;	//  x > 0 ? 1: -1 算是一个表达式,值取决于 ? 前面的条件
}

其他常见运算符

  1. typeof
  2. new
  3. in
  4. await
  5. delete
  6. void
  7. instanceof

运算符与优先级 - 汇总表

一张比较完整的汇总表,值越大优先级越高。

优先级运算符类型结合性运算符
19分组n/a(不相关)( … )
18成员访问从左到右… . …
18需计算的成员访问从左到右… [ … ]
18new(带参数列表)n/anew … ( … )
18函数调用从左到右… ( … )
18可选链(Optional chaining)从左到右?.
17new(无参数列表)从右到左new …
16后置递增n/a… ++
16后置递减n/a… --
15逻辑非 (!)从右到左! …
15按位非 (~)从右到左~ …
15一元加法 (+)从右到左+ …
15一元减法 (-)从右到左- …
15前置递增从右到左++ …
15前置递减从右到左-- …
15typeof从右到左typeof …
15void从右到左void …
15delete从右到左delete …
15await从右到左await …
14幂 (**)从右到左… ** …
13乘法 (*)从左到右… * …
13除法 (/)从左到右… / …
13取余 (%)从左到右… % …
12加法 (+)从左到右… + …
12减法 (-)从左到右… - …
11按位左移 (<<)从左到右… << …
11按位右移 (>>)从左到右… >> …
11无符号右移 (>>>)从左到右… >>> …
10小于 (<)从左到右… < …
10小于等于 (<=)从左到右… <= …
10大于 (>)从左到右… > …
10大于等于 (>=)从左到右… >= …
10in从左到右… in …
10instanceof从左到右… instanceof …
9相等 (==)从左到右… == …
9不相等 (!=)从左到右… != …
9一致/严格相等 (===)从左到右… === …
9不一致/严格不相等 (!==)从左到右… !== …
8按位与 (&)从左到右… & …
7按位异或 (^)从左到右… ^ …
6按位或 (|)从左到右… | …
5逻辑与 (&&)从左到右… && …
4逻辑或 (||)从左到右… || …
4空值合并 (??)从左到右… ?? …
3条件(三元)运算符从右到左… ? … : …
2赋值从右到左… = …
2赋值从右到左… += …
2赋值从右到左… -= …
2赋值从右到左… **= …
2赋值从右到左… *= …
2赋值从右到左… /= …
2赋值从右到左… %= …
2赋值从右到左… <<= …
2赋值从右到左… >>= …
2赋值从右到左… >>>= …
2赋值从右到左… &= …
2赋值从右到左… ^= …
2赋值从右到左… |= …
2赋值从右到左… &&= …
2赋值从右到左… ||= …
2赋值从右到左… ??= …
1逗号 / 序列从左到右… , …
文章来源:https://blog.csdn.net/wander_alice/article/details/135679613
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。