Prettier为何在while条件中添加额外括号?
Prettier给do-while循环条件添加额外括号的原因
这不是Bug,Prettier这么做是出于以下几个明确的风格与可读性考虑:
- 消除歧义,强化意图:
a /= b是赋值操作,虽然JavaScript允许它直接作为do-while的循环条件(赋值表达式会返回赋值后的值,以此作为判断依据),但这种写法很容易被误读为相等判断(a == b)。额外添加一层括号后,能清晰告诉阅读者:这里是一个带返回值的赋值操作,同时作为循环的判断条件,代码意图更直白。 - 遵循Prettier内置风格规则:Prettier的核心目标是统一代码风格、减少不必要的争议。对于所有“在条件语句中直接使用赋值表达式”的场景(包括if、while、do-while),它都会强制添加括号。比如
if (a = b)也会被格式化为if ((a = b)),这是其预设的规范,而非错误。 - 提升代码可读性:尤其是对不熟悉JavaScript表达式特性的开发者来说,加括号能降低理解成本,快速识别出这不是常规的条件判断逻辑,而是包含了赋值的操作。
对比原代码与格式化后代码:
原代码:
let [a, b] = [64n, 2n]; do { console.log(a); } while (a /= b);
格式化后代码:
let [a, b] = [64n, 2n]; do { console.log(a); } while ((a /= b));
两段代码逻辑完全一致,输出结果相同,差异仅在于格式规范层面。
内容的提问来源于stack exchange,提问作者Mr. X
相关产品推荐
相关产品推荐

