常见运算符
算术运算符
- 加法
+,如2 + 3,注意但凡遇到字符串,则作拼接作用,如2 + '3'、'2' + 3、'2' + '3'结果都是字符串 ‘23’; - 减法
-,如2 - 3; - 乘法
*,如2 * 3; - 除法
/,如2 / 3; - 取余
%,如3 % 2,表示 3÷2 的余数; - 求幂
**,如3 ** 2,表示 32。
逻辑运算符
逻辑运算是好玩的,也是相对简单的,这里不展开叙述。
- 与(
&&) - 或(
||) - 非(
!) - 空值合并运算符(
??)
位运算符
位运算不常见,一般可用于解决内存效率问题、底层运算问题、加密问题等。
- 按位与 (
&) - 按位或 (
|) - 按位异或 (
^) - 按位非 (
~) - 左移 (
<<) - 右移 (
>>) - 无符号右移 (
>>>)
比较运算符
- 比较的结果是布尔值
true或false; - 常见的如,
>、<、<=、>=、==; - 严格相等
===,严格不相等!==,比如0 !== ''、null !== undefined; - 下面展示,一些特殊类型的数据比较(如
null、字符串、布尔值、NaN、undefined)。
/* 与布尔值的比较 */
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
赋值运算符
- 简单的复制运算符,就是一个等于号,即
=; - 配合算术运算符,如
+=、/=、**=等; - 配合逻辑运算符,如
||=、??=等; - 配合位运算符,如
<<=、&=等; - 链式赋值,如
a = b = 2。
let a = 2;
a += 1 // a=3
a ^= 0b1 // a=1
自增、自减
- 自增
++,将变量与 1 相加; - 自减
--,将变量与 1 相减; - 操作数据必须是数。
let a = 100;
a ++; // 101
a --; // 100
'0' ++; // Error
一元运算符、三元运算符
- N元运算符,表示操作数据是N个;
- 一元运算符:
+,用于将数据转换成数字;-,用于取一个数的负值。
- 三元运算符:
?:,等效于一个简单的条件判断语句,可以像if语句一样嵌套。
+'12' // 12 - 数值
+'' // 0 - 数值
+true // 1 - 数值
/* 符号函数:如果x>0,返回1,否则-1 */
function sign(x) {
return x > 0 ? 1: -1; // x > 0 ? 1: -1 算是一个表达式,值取决于 ? 前面的条件
}
其他常见运算符
typeofnewinawaitdeletevoidinstanceof
运算符与优先级 - 汇总表
一张比较完整的汇总表,值越大优先级越高。
| 优先级 | 运算符类型 | 结合性 | 运算符 |
|---|---|---|---|
| 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 | 逗号 / 序列 | 从左到右 | … , … |
本文详细介绍了JavaScript中的各种运算符,包括算术运算、逻辑运算、位运算、比较运算、赋值运算以及自增自减等,并讨论了运算符的优先级和使用场景。
2305

被折叠的 条评论
为什么被折叠?



