如果这个工具帮到了你,可以请作者喝杯咖啡 ☕
快速查看JavaScript运算符优先级与结合性,避免运算逻辑错误
( )分组表达式无结合性用括号显式改变表达式求值顺序,括号内先计算。
(a + b) * c.成员与调用左结合访问对象的命名属性。
user.name[]成员与调用左结合用表达式结果作为属性名或数组索引。
items[index]?.成员与调用左结合对象为空值时短路返回 undefined,避免继续访问时报错。
user.profile?.email()成员与调用左结合调用函数、方法或可调用表达式。
format(value)new ...()成员与调用左结合创建构造函数实例,并传入参数列表。
new Date(2026, 0, 1)new对象创建右结合创建构造函数实例;省略调用括号时优先级低于成员访问和函数调用。
new Datex++后置运算无结合性返回变量当前值,然后将变量加 1。
count++x--后置运算无结合性返回变量当前值,然后将变量减 1。
count--++x一元运算右结合先将变量加 1,再返回新值。
++count--x一元运算右结合先将变量减 1,再返回新值。
--count!一元运算右结合将值转换为布尔值后取反。
!isReady~一元运算右结合将操作数转为 32 位整数后逐位取反。
~mask+x一元运算右结合尝试将操作数转换为数字。
+inputValue-x一元运算右结合将操作数转换为数字后取相反数。
-pricetypeof一元运算右结合返回操作数类型的字符串描述。
typeof valuevoid一元运算右结合计算表达式并返回 undefined。
void fn()delete一元运算右结合删除对象上的可配置属性。
delete user.tempawait一元运算右结合在 async 函数或模块顶层等待 Promise 结果。
await fetchData()**幂运算右结合计算左操作数的右操作数次幂;左侧不能直接是一元表达式。
2 ** 3 ** 2*乘除取余左结合两个数值相乘。
width * height/乘除取余左结合左操作数除以右操作数。
total / count%乘除取余左结合返回除法后的余数。
index % 2+加减连接左结合数值相加;任一操作数为字符串时通常执行字符串连接。
firstName + lastName-加减连接左结合两个数值相减。
end - start<<位移运算左结合将 32 位整数按位左移。
1 << bit>>位移运算左结合保留符号位进行右移。
value >> 1>>>位移运算左结合高位补 0 进行右移。
value >>> 1<关系判断左结合比较左操作数是否小于右操作数。
age < 18<=关系判断左结合比较左操作数是否小于或等于右操作数。
score <= 100>关系判断左结合比较左操作数是否大于右操作数。
price > limit>=关系判断左结合比较左操作数是否大于或等于右操作数。
count >= minin关系判断左结合判断指定属性名是否存在于对象或其原型链中。
"name" in userinstanceof关系判断左结合判断对象是否出现在构造函数的原型链上。
value instanceof Date==相等判断左结合允许类型转换后比较两个值是否相等。
value == null!=相等判断左结合允许类型转换后比较两个值是否不相等。
value != 0===相等判断左结合不进行类型转换,比较类型和值是否都相同。
status === "ok"!==相等判断左结合不进行类型转换,判断类型或值是否不同。
status !== "ok"&按位运算左结合两个 32 位整数逐位执行与运算。
flags & enabled^按位运算左结合两个 32 位整数逐位执行异或运算。
flags ^ mask|按位运算左结合两个 32 位整数逐位执行或运算。
flags | selected&&逻辑运算左结合左侧为假值时短路返回左侧,否则返回右侧。
user && user.name||逻辑运算左结合左侧为真值时短路返回左侧,否则返回右侧。
name || "匿名"??空值合并左结合左侧为 null 或 undefined 时返回右侧;与 &&、|| 混用时需要加括号。
count ?? 0?:条件运算右结合根据条件表达式结果在两个分支表达式中选择一个。
score >= 60 ? "通过" : "未通过"=赋值与函数右结合将右侧表达式结果赋给左侧引用。
total = 0+=赋值与函数右结合等价于把当前值与右侧值相加后再赋回。
total += price-=赋值与函数右结合等价于把当前值减去右侧值后再赋回。
count -= 1*=赋值与函数右结合等价于把当前值乘以右侧值后再赋回。
size *= 2/=赋值与函数右结合等价于把当前值除以右侧值后再赋回。
size /= 2%=赋值与函数右结合等价于把当前值取余后再赋回。
index %= length**=赋值与函数右结合等价于对当前值执行幂运算后再赋回。
value **= 2<<=赋值与函数右结合等价于左移后再赋回。
mask <<= 1>>=赋值与函数右结合等价于有符号右移后再赋回。
mask >>= 1>>>=赋值与函数右结合等价于无符号右移后再赋回。
mask >>>= 1&=赋值与函数右结合等价于按位与后再赋回。
flags &= mask^=赋值与函数右结合等价于按位异或后再赋回。
flags ^= mask|=赋值与函数右结合等价于按位或后再赋回。
flags |= mask&&=赋值与函数右结合左侧为真值时,才将右侧结果赋给左侧。
enabled &&= isAdmin||=赋值与函数右结合左侧为假值时,才将右侧结果赋给左侧。
title ||= "未命名"??=赋值与函数右结合左侧为 null 或 undefined 时,才将右侧结果赋给左侧。
options.timeout ??= 3000=>赋值与函数右结合定义箭头函数表达式。
(x) => x * 2yield赋值与函数右结合在生成器函数中暂停执行并产出一个值。
yield valueyield*赋值与函数右结合把产出过程委托给另一个可迭代对象。
yield* list,逗号运算左结合从左到右依次求值,整个表达式结果为最后一个表达式。
(x += 1, x * 2)在编写复杂 JavaScript 表达式时,不同运算符的优先级常常导致意料之外的计算结果。本工具直接解决运算符优先级不明的问题,通过输入任意的 JS 运算符符号或名称,即时返回该运算符的优先级级别、结合性以及简要说明,帮助开发者准确预判表达式运算顺序。
+、*、&& 或 ===。&&,输出:优先级 6,左结合,逻辑与运算符。.、[] 以及带参数列表的 new、函数调用 () 优先级最高,级别为 20,且均为左结合。a - b + c 等价于 (a - b) + c;赋值运算符是右结合,a = b = 5 等价于 a = (b = 5)。仅支持输入标准的 JavaScript 运算符符号,不支持自定义运算符或非运算符字符;结果基于最新 ECMAScript 规范,但不同宿主或极早期引擎可能略有差异,建议以实际运行环境为准;本工具纯前端运算,不会记录或上传您的任何输入内容。
在阅读或编写复杂表达式时,推荐优先使用括号()明确意图,即使优先级已知,括号也能大幅提升代码可读性和可维护性。以下是常见的优先级速记:乘性运算符(* / %,级别14)高于加性运算符(+ -,级别13);比较运算符(< <= > >=,级别11)高于相等运算符(== != === !==,级别10);逻辑与&&(级别6)高于逻辑或||(级别5)。在条件判断与类型检测中,如需组合多种运算符,随时使用本工具快速核对,可有效避免因优先级误解而产生的逻辑错误。