请问这样写代码有什么用?

接手其他同事的二手代码。
发现很多写法都看不懂是什么意思?
比如:特别喜欢用括号和逗号。
不知道这样写有什么用?

如图:
image.png

image.png

阅读 7.3k
11 个回答

使用工具优化过后的代码会大量使用逗号运算符。但是人工写的代码不推荐使用逗号运算符来分隔语句,一句一行,分号分隔(也有些项目规范不使用分号的)

像题主给的这些示例就是典型的反例,一个一个完全是意义明确而且独立的语句,就算写在一行,也应该使用分号而不是逗号来分隔(当然也不推荐多个语句写在同一行,简短的流程控制语句(比如 if (xx) { return; })除外。

当然逗号分隔符有时候也还是需要用的,比如在 reduce 的时候,可能会遇到这种情况

// 仅代码示意,这段代码没什么实际意义
[...Array(10).keys()]
    .reduce((acc, it) => (acc.push(it + it), acc), []);

这里需要操作 acc,又需要返回 acc,然而 push 返回的是新的数组长度,所以只好用逗号运算来把 acc 处理为表达式返回值。

当然这也可以写成

(acc, it) => {
    acc.push(it + it);
    return acc;
}

没毛病。但上面的逗号分隔并不是简单地用逗号来拼接多个语句,而是把语句(块)变成了表达式,与题主贴出来的代码有本质的不同。

个人风格习惯,当然这不是什么好的习惯。
在调试时,这种代码更不容易被断点。

当然,在一些场景下,这个 逗号 也有一些用途,见:逗号操作符,它会将最后一个操作数的值返回,比如在函数中写。

function foo(){
    return (1, 2, 3, 4)
}

最终返回的其实是 4

就是逗号操作符,仅返回最后一个值作为返回值。

在实际工作中不会被推荐这种写法,因为在一定程度上降低可读性。
但通过 webpack 之类的 bundle 打包工具处理后多数会编译为这种写法,使用逗号分隔操作符代码会更短、体积更小,浏览器可不在乎 js 代码的可读性~

改它。
用eslint自动校验下。

看大家好像都不喜欢这种风格,我感觉还好吧,说装*什么的,严重了。

楼主贴的代码,看啥去还是很清晰的。

如果用分号,总感觉这是三行代码,排版错乱了,全都跑到了一行的感觉:

this.aaa();   this.bbb();    this.ccc();

但如果是逗号,似乎视觉上更合情合理一点:

this.aaa(), this.bbb(), this.ccc();

在一个模块顶部,申明变量时可以节约很多冗余:

let aaa, bbb=0, ccc=false, ddd=null, eee='';

// 等同于:
let aaa; let bbb=0; let ccc=false; let ddd=null; let eee='';

箭头函数的意义之一就是减少书面,用逗号可进一步省略 return 关键字:

a=>(a++,a)

// 等同于:
a=>{a++; return a}

最后说个题外话,当年刚入门时,我看到这样的代码非常、非常、非常的讨厌:

// 这是在装什么,害的我捋代码时大脑混乱:
if(xxx) xxxxx;

// 为什么就不能老老实实写成,清晰明了:
if(xxx) {
   xxxxx;
}

而多年后的我,常常写这样的代码,真香:

function() {
    if(xxx) return toast('error info 1');
    if(xxx) return toast('error info 2');
    ……
}

一是为了写在一行,二是为了装逼。这种代码可读性太低了,大部分人会讨厌这个写法

新手上路,请多包涵

我想到比较有意义的场景就是

<button onClick={(doSometing(),handleClick)}>click me</button>

看到不太常规的写法,通常都来自于别的语言;计算机语言都在相互学习,模仿,兼容;一个人会的语言多了,就会出现上述这种看似不常规但又合乎情理的写法。

方便,不用换行

新手上路,请多包涵

这样可能在一行内可以看清楚,不过还是不觉得好

新手上路,请多包涵

他这个是因为语句结束用的是 逗号结尾,然后格式化一下代码,逗号前面的代码就会被()包在里里面,改成分号就不会了。没啥特殊含义

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题