«

一个很冷门的 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
}

会把读源码的人给吓到。

标签: 原创 JS