99% 的人没用过,但 100% 的人都被它坑过:JS 逗号操作符
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
事情发生在一个再普通不过的加班夜。那天我在帮同事小王 review 一段前端代码,他一脸骄傲地说:
我低头一看,代码长这样: 我当场愣住了三秒。不是因为我看不懂,而是因为我突然不确定自己是不是看懂了。 我指着屏幕,小心翼翼地问他一句:“你这个 if,到底在判断什么?” 小王自信满满:“当然是判断 a、b、c 啊,用逗号都写进去了,多简洁!” 我当时就知道了今天不讲清楚 JavaScript 的「逗号操作符」,这事儿过不去了。 先别急,逗号操作符到底是啥?我们今天的主角,是 JavaScript 里一个存在感极低,但坑点极高的操作符:逗号操作符(Comma Operator) 它的语法长得非常朴素: 但它的行为却非常“腹黑”:从左到右依次执行所有表达式,整个表达式的结果,只取最后一个表达式的值。 一句话总结:前面的,全是过场;最后的,才是主角。 把逗号操作符想成什么?我后来给小王打了个比方,他一下就懂了。 逗号操作符,就像“流水线安检”,你去坐高铁,要经过好几道安检:
这些步骤都会执行,但最后决定你能不能上车的只有检票那一步。 JavaScript 的逗号操作符也是一样:
最基础的例子:别再被骗了我们从最简单的开始。 你猜输出多少?不是 3,也不是 7 + 3,而是: 因为执行顺序是:
再来一个稍微“坏一点”的例子: 执行过程:
最终结果: 为什么很多人第一次见它是在 if 里?因为 逗号操作符最容易埋雷的地方,就是条件判断。 回到开头那段代码: 我们来拆一下。JavaScript 会这样理解: 也就是说:
如果 c > 0 为 true,if 就成立;前面的 a、b 完全不参与判断逻辑。 逗号操作符 ≠ 数组、参数分隔符(这是重灾区)很多新手(甚至老手)都会混淆这三件事: 1、数组里的逗号 不是逗号操作符,这是 数组元素分隔符 2、函数参数里的逗号 不是逗号操作符,这是 参数分隔符 3、只有在“表达式上下文”里的逗号,才是逗号操作符 比如: 必须是表达式,而且通常要加括号,否则语法就变味了。 for 循环:逗号操作符的“正经工作场所”如果说逗号操作符有什么“合法打工”的地方,那一定是for 循环 在这里:
这些地方天然就支持多个表达式,逗号操作符在这儿 不显得突兀,反而很自然。 我通常的态度是:for 里可以用,if 里慎用,return 里尽量别用。 return + 逗号操作符:读代码的人会想打你来看一段“技术上完全合法,但精神上很不友好”的代码: 执行结果是:
技术上没毛病,但下一个维护你代码的人,可能会默默骂你三分钟。 逗号操作符的优先级:比你想得还低这是另一个隐蔽坑点。逗号操作符的优先级:几乎是 JavaScript 里最低的 举个例子: 你以为是? 其实 JavaScript 解析为: 所以: 想用逗号操作符,几乎永远要加括号。 那它到底该不该用?说句掏心窝子的实话。我回头看自己这几年的代码经验,我的结论是:逗号操作符是一个“你要懂,但不一定要常用”的东西。 它适合的场景:
它不适合的场景:
总结:技术不是炫技,是沟通我最后对小王说了一句话:“代码不是写给 JavaScript 引擎看的,是写给人看的。” 逗号操作符就像一句冷笑话,懂的人会会心一笑,不懂的人会一脸问号。 你可以会它,但请慎重用它。 转自https://juejin.cn/post/7600316828485058575 该文章在 2026/6/2 10:17:56 编辑过 |
相关文章
正在查询... |