javascript 一行结束要不要加分号?

2016-10-24 16:18:14 +08:00
 chaegumi
在我印象中是要加的,但是最新在学习 electron 和 vue.js 时,文档和例子中的代码,很多发现都没有加,很不习惯,我写 php 的时候也加了。

我想知道标准的做法。
17734 次点击
所在节点    程序员
83 条回复
chaegumi
2016-10-24 16:21:53 +08:00
还有学习 html 的时候 单标签结束,印象中都是 这样的,/>,现在看的很多前端文档,里边又不要这样了。
hanzichi
2016-10-24 16:24:38 +08:00
PHP 是强制要加的吧, JavaScript 不是必须的

不过本人封号党 ...
ansheng
2016-10-24 16:26:18 +08:00
单纯的 js 是要加上的,因为你用了构建工具,所以他会自动的帮你加上,
zhuangtongfa
2016-10-24 16:27:48 +08:00
如果你写 JS 代码不喜欢带分号,而又搞不清什么时候必须加分号,可以这么做:在以 "("、"[" 、"/"、"+"、"-" 开头的语句前面都加上一个分号,如
```js
;(a + b).toString()
```
66beta
2016-10-24 16:29:35 +08:00
你需要 linter
palmers
2016-10-24 16:31:38 +08:00
js 语句结束应该加 `;`
Keyes
2016-10-24 16:35:40 +08:00
@zhuangtongfa 这个总结 666
dong3580
2016-10-24 16:37:37 +08:00
要加,不加一般情况也不会报错。然而会为以后留下隐患,可以上个代码检测工具了,
nullizer
2016-10-24 16:38:04 +08:00
ES6 之后语法越来越像 python 了,箭头函数和一堆函数式风格语句加了分号越看越怪异。
NemoAlex
2016-10-24 16:47:59 +08:00
1. JS 本身的语法,对于有明确换行的语句,结束的分号是允许不写的。
2. 过去的主流是写分号,一方面是符合类 C 语言的语法,另一方面,某些工具对于没有分号的处理存在问题。
3. 现在的主流工具,处理对于不加分号的写法,都没有问题。
4. 现在的主流写法是不加。
https://github.com/feross/standard/blob/master/RULES.md#semicolons
imshawer
2016-10-24 16:54:05 +08:00
@chaegumi JS 是需要分号的,至于 HTML 加不加 “/” 是由 DOCTYPE 确定的。
neoblackcap
2016-10-24 16:57:24 +08:00
@NemoAlex 然而括号开头的话,那么就要加,这样不如全部都加
yangxiongguo
2016-10-24 17:11:42 +08:00
大部分不写,有少部分是肌肉记忆写的,与我无关
FrankFang128
2016-10-24 17:14:49 +08:00
加毛分号
NemoAlex
2016-10-24 17:16:17 +08:00
@neoblackcap 以前这么做主要是为了避免压缩出错。而现在的主流压缩工具,都不需要加分号了。
ijse
2016-10-24 17:16:48 +08:00
你要的标准: http://standardjs.com/ 是不加分号的。

一般由 eslint 检查,同时还能避免或提前发现一些问题。

其实,没什么标准规范,团队达成一致并遵守即可。
zpf124
2016-10-24 17:29:17 +08:00
@chaegumi
1.分号 这个东西最好加上,因为
一来,一部分的人的书写习惯,你不写他们看着不顺眼;
二来, js 本身当初设计就很简单不严谨,所有 小程序啊 以及个别的上古浏览器对于这些解析会有各种奇怪的问题,所以现在开始出现 tc 啊 strict 模式这些东西。

当然,如果上面这俩问题你不用考虑那就不用管他,加不加都可以,但记得一个项目里要统一,别前面不加,中间突然开始加分号,最后又没了。

2 , 结束标记问题, 不需要加!
这是当初的 XHTML 标准推广的玩意,要求标签必须有结束元标记必须带“/”,而且除了这个还要求 标签必须小写,属性必须有值且值必须被双引号包围。
然而这个标准已经死了,你现在写按照 html5 的标准或者 html4.1 的就行了。
zpf124
2016-10-24 17:31:01 +08:00
@imshawer html4 和 html5 都不强制要求必须有结束标记,那个是 XHTML 的标准。
broker
2016-10-24 17:34:00 +08:00
可以参考下 Automatic Semicolon Insertion

The source

return
a + b
is transformed by automatic semicolon insertion into the following:

return;
a + b;

The source

a = b + c
(d + e).print()

is not transformed by automatic semicolon insertion, because the parenthesised expression that begins the second line can be interpreted as an argument list for a function call:

a = b + c(d + e).print()
neoblackcap
2016-10-24 17:38:23 +08:00
@NemoAlex 请参考 @broker 的例子,那是 http://standardjs.com/ 里面提到的,那个根本就是有歧义,不加分号无法区别作者的真正意图

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

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

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

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

© 2021 V2EX