JavaScript多变量连续赋值的用法、参考及Lint禁用合理性问询
JavaScript多变量连续赋值的场景、权威参考与Lint建议
一、连续赋值的本质
JavaScript的赋值表达式本身会返回被赋予的值,且赋值运算符是右结合的,所以b = a = 2这类写法的实际执行顺序是:先完成右侧的a = 2(给a赋值2,同时返回2),再把这个返回值赋给b。示例代码:
let a = 10; let b = a = 2; console.log(`a - ${a}, b - ${b}`); // 输出 "a - 2, b - 2"
二、适用场景
这种写法没有不可替代的核心场景,更多是追求代码简洁的可选写法:
- 快速初始化多个变量为同一值:比如
let x = y = z = 0;,能减少代码行数,但注意用var会存在变量提升导致全局污染的问题,let/const则无此隐患。 - 同时给对象属性和变量赋值:比如
let current = user.lastLogin = new Date();,一次性完成给user.lastLogin赋值,同时把结果存到current变量中。
但以上场景都可以通过分开赋值实现,且可读性往往更好,连续赋值只是提供了一种更紧凑的写法。
三、权威参考
ECMAScript官方规范明确定义了赋值运算符的行为:
- 赋值表达式的返回值为赋值后右侧表达式的值;
- 赋值运算符是右结合的,即连续赋值会从右往左依次执行,
a = b = c等价于a = (b = c)。
四、是否在Lint中禁用
这取决于团队的编码规范偏好:
- 如果团队包含较多JS新手,或者优先保障代码可读性,建议禁用。连续赋值容易让不熟悉语法的开发者误解执行顺序(比如误以为
b = a = 2是先把a的旧值赋给b,再给a赋值2),增加理解和维护成本。ESLint的no-multi-assign规则就可以直接禁用这种写法。 - 如果团队成员对JS语法都很熟悉,且追求代码简洁性,可以保留,但建议只在明确的、无歧义的场景下使用,不要滥用。
内容的提问来源于stack exchange,提问作者Juneyoung Oh
相关产品推荐
相关产品推荐

