JavaScript 中到底加不加分号?

2021-05-02 18:47:32 +08:00
 liuxing

JavaScript 中的分号问题

本文讨论了 JavaScript 中的分号自动插入机制以及哪些情况下必须要加分号。

原文链接: https://www.liuxing.io/blog/semicolons-in-javascript/

那么究竟是写分号多还是不写分号的多?

9521 次点击
所在节点    Node.js
78 条回复
ericgui
2021-05-04 05:31:44 +08:00
这个是个人主观选择的代码风格

我司没有
我个人项目有
image72
2021-05-04 08:09:04 +08:00
最佳实践肯定是 nodejs 源代码,加分号,2 space 锁进。 谁敢说自己代码写的比 nodejs 源代码更好
image72
2021-05-04 08:13:25 +08:00
包括几乎所有的 w3c,ECMA 提案中的实例代码,都是加分号,2 spacce 锁进
zgl263885
2021-05-04 14:36:38 +08:00
可能我比较菜,我的原则是,只要这些代码还有可能给人看,全加上。不光分号,if 语句后面的花括号我也是全加上。
给我看的代码,如果省略了很多,导致我阅读障碍,我心里(甚至发出声)会骂人的,这写的什么玩意儿!
jqtmviyu
2021-05-04 21:32:54 +08:00
保护小拇指, 但单条语句会加大括号.
liuxing
2021-05-04 21:46:24 +08:00
@jqtmviyu 程序员养生之道 哈哈哈
aleen42
2021-05-05 07:17:06 +08:00
如果沒有強迫加,就很容易因 JS 分文件加載而導致前一個文件的最後一句與後一個文件的首句間缺少分號阻隔。這種情況下很多人習慣在每個文件頭都加一個分號以保證容錯
msg7086
2021-05-05 13:37:45 +08:00
我写 VueJS,不加。
我觉得更重要的问题不是加与不加,而是知道什么时候语言会给你加,什么时候会不给你加。
毕竟 JS 里是有就算你不加分号也会给你强制加上的情况,所以如果你不懂,那等你写的时候就会有坑了。

比如 return 后的换行是会强行给你加分号的。
如果你不懂分号机制,就算是全程加分号,也无法避免下面的代码撞坑。
return
{
data: 1
};
liuxing
2021-05-05 17:20:34 +08:00
@msg7086 哈哈哈 对 原文有讨论 ASI 机制 https://www.liuxing.io/blog/semicolons-in-javascript/
msg7086
2021-05-05 23:22:26 +08:00
@liuxing 对。我的意思是,不能因为这东西迷惑就不去学习研究他。
yl14786922106
2021-05-06 09:06:21 +08:00
let a = 1
(function (){console.log(a)})()
VM45:2 Uncaught TypeError: 1 is not a function
at <anonymous>:2:1
(anonymous) @ VM45:2
let a = 1;
(function (){console.log(a)})()
VM53:2 1
undefined

执行下就知道 该不该加了。
zzzmh
2021-05-06 09:57:01 +08:00
问了前端说不加
但我 java 出身写 vue 必须都加,不加浑身难受
zhuweiyou
2021-05-06 14:15:51 +08:00
这是引战话题.
我习惯不加, 然后配合 prettier 规则格式化.

其实重点不是加不加, 是团队需要统一风格比较好.
zone10
2021-05-06 14:26:18 +08:00
能不加分号的语言加分号像个憨猪, 点名 JS, Go, Scala, 当然, 老大是从 Java 过来的憨猪硬让你加也没办法
BoringTu
2021-05-06 14:29:57 +08:00
来来来,咱们聊聊两点:
1. 缩进。A 需要视觉上缩进是 4 个字符距离,B 需要视觉上缩进是 2 个字符距离,C 需要视觉上缩进是 3 个字符距离。你们用空格来缩进的怎么处理?忽略个人需求,强制使用?
2. 格式化代码。你们疯了吧?习惯性格式化代码是个什么习惯,不怕被打死?每个人的编辑器都不一样,A 把代码提交了,B 拉下来改东西然后格式化了一下代码也 push 了,这时候 B 的这个 commit 文件对比的意义何在?很可能全篇都是改动,怎么对比?
nekochyan
2021-05-06 14:57:31 +08:00
看个人习惯,建议加分号和 4 空格缩进;
如果是团队就跟着团队走,我们公司都是加分号和 4 空格缩进的,所以我写代码的时候随时习惯格式化一下提交也没啥冲突
hamptonchen
2021-05-16 09:53:42 +08:00
现在绝大多数前端项目都是在 Vue 、React 、Angular 等框架下开发的,这些其实可以不用加分号,因为代码最后打包的时候会被编译,编译器会自动帮你加上的
wangtian2020
2021-05-17 16:32:29 +08:00
我的 vscode 用户 setting.json 中的 prettier 配置
"prettier.useTabs": false,
"prettier.tabWidth": 4,
"prettier.singleQuote": true,
"prettier.trailingComma": "es5",
"prettier.printWidth": 140,
"prettier.semi": false,
不加分号

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/774657

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX