运算符与优先级 - JS

常见运算符

算术运算符

  • 加法 +,如 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 需计算的成员访问 从左到右 … [ … ]
18 new(带参数列表) n/a new … ( … )
18 函数调用 从左到右 … ( … )
18 可选链(Optional chaining) 从左到右 ?.
17 new(无参数列表) 从右到左 new …
16 后置递增 n/a … ++
16 后置递减 n/a … --
15 逻辑非 (!) 从右到左 ! …
15 按位非 (~) 从右到左 ~ …
15 一元加法 (+) 从右到左 + …
15 一元减法 (-) 从右到左 - …
15 前置递增 从右到左 ++ …
15 前置递减 从右到左 -- …
15 typeof 从右到左 typeof …
15 void 从右到左 void …
15 delete 从右到左 delete …
15 await 从右到左 await …
14 幂 (**) 从右到左 … ** …
13 乘法 (*) 从左到右 … * …
13 除法 (/) 从左到右 … / …
13 取余 (%) 从左到右 … % …
12 加法 (+) 从左到右 … + …
12 减法 (-) 从左到右 … - …
11 按位左移 (<<) 从左到右 … << …
11 按位右移 (>>) 从左到右 … >> …
11 无符号右移 (>>>) 从左到右 … >>> …
10 小于 (<) 从左到右 … < …
10 小于等于 (<=) 从左到右 … <= …
10 大于 (>) 从左到右 … > …
10 大于等于 (>=) 从左到右 … >= …
10 in 从左到右 … in …
10 instanceof 从左到右 … 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 逗号 / 序列 从左到右 … , …

你可能感兴趣的:(#,JS,基本语法,javascript,开发语言,ecmascript,笔记,学习)