一个很冷门的 JS 知识点:逗号操作符
时间:2026-4-30 00:37 作者:独元殇 分类: 前端技术
你知道 JS 里有个逗号操作符吗?
let a = 1;
let b = 2;
let c = (a++, b++);
console.log(a, b, c); // 执行结果是 2 3 2
// 或者
if(true, false, true){alert('hi')}
在第一个这个代码里,c 赋值时,会把 a 和 b 都自增加赋值一下,然后 c 取最后一个表达式的值,所以 c 等于 b++ 执行前的值 2。
第二个的话,则是取最后一个 true 。然后弹窗 hi 。
神奇吧!
其实,绝大部分人都没刻意用过逗号操作符,实际上连知道都根本不知道。这个知识点很冷门,存在感很低,实际上也造就了很多 bug ,坑过不少人 哈哈。
注意,我们在搞 JS 数组里也会有逗号,比如 [3, 6, 2, 5] ,这里面的逗号叫 【数组元素分隔符】,而在 函数参数里也有逗号,比如 setName(id, 'Tom') ,这个叫 参数分隔符 ,而我们今天了解的是 逗号操作符,是在表达式里(通常是在括号里)的逗号 ,注意,是表达式,和前面将的这些都不一样。
今天给大家讲讲关于这个 逗号操作符 的一些内容。
其实很简单。就是:
a = (expr1, expr2, expr3, ..., exprN);
console.log(a); // 输出 exprN 的值
就是在一个括号里,有很多倍逗号分隔的参数(表达式),然后依次执行,最后再返回最后一个值。
这个东西,在实际工作里,很少用到,毕竟有隐藏知识,不学的话一眼看不懂,因此用的少,但是在面试的时候,就好玩了哈哈!
我在网上找到这样一个代码,看起来足以让很多不知道这个知识点的人不明所以:
if(a = 1, b = 2, c < 0){
console.log('ok');
}
其实这串代码,等同于:
a = 1;
b = 2;
if(c < 0){
console.log('ok');
}
它经常用在哪里呢?
其实,我们很多人在学习或者读他人源码时,遇到的 for 循环里可能无意识的用过这个【逗号操作符】。这个语法,其实就是为 for 循环设计的:
for (let i = 0, j = 80; i < j; i++, j--) {
console.log(i, j);
}
怎么样,恍然大悟了吧。
当然,还有个有意思(丧心病狂)的用法:
const func = () => {
let a = 7;
return a, 10; // 没想到吧,最后 return 的是 10
}
会把读源码的人给吓到。