console.log("Hello, World!")
[1,2,3].map(i=>console.log(i))
报错"cannot read property '3' of undefined"
那大家还写不写分号呢? https://blog.fundebug.com/2018/09/18/js-semicolon-bug/
1
Justin13 2018-09-19 11:17:30 +08:00 via Android
个人写,但是这些不写分号的 bug 都可以绕过去。
|
2
sohoorc 2018-09-19 11:19:50 +08:00
不写分号在错误定位上也有问题。
|
3
Vhc001 2018-09-19 11:20:25 +08:00 8
看到 尤雨溪 到处喷 js 结尾写分号的人,我都不敢和别人说我我写 js 也在结尾写分号
|
4
maichael 2018-09-19 11:25:25 +08:00
能不写就不写,交给 linter 和 formatter 解决,基本没出过问题。
|
5
mars0prince 2018-09-19 11:25:43 +08:00
不写分号会有语法 BUG 的
|
6
anjianshi 2018-09-19 11:26:01 +08:00
用 eslint 等工具,在这种情况下是会提示你的。
所以不写分号,要么自己记住并注意这几个特殊情况,要么养成好习惯,给编辑器加一个默认开启的 eslint,配置一些基本的 rule 即可,这样还能避免其他一些手误写错的代码。 要是不想开 eslint,也怕记不住这些特殊情况,那就写分号。 |
7
webxh6 2018-09-19 11:30:52 +08:00
想写就写,项目能写出来,代码能够优化好。
就看你自己怎么对待啦 |
8
xycool 2018-09-19 11:38:39 +08:00 via iPhone 1
我 tslint 的规则是不写分号
|
9
TomatoYuyuko 2018-09-19 11:40:02 +08:00 1
已经养成习惯写了,也不费事,看到光屁股代码浑身难受
|
10
zhzer 2018-09-19 11:41:16 +08:00 via Android
不写分号在拼接代码的时候最容易报错,但是你不用 lint 么……
|
11
xenme 2018-09-19 11:49:58 +08:00 via iPhone
顺道问个问题,像 webpack build 之后的代码很多都用逗号,debug 的时候如何去方便的 debug
|
14
wu67 2018-09-19 11:56:55 +08:00
不写, 交给 webpack 那一套来解决就行了, 反正 npm 一跑, 最后得到的代码还是会给加上分号
|
15
Sparetire 2018-09-19 11:58:52 +08:00 via Android
不写可能出 bug,写了也可能出 bug,由于自动分号插入机制的存在,最好是在工具链层面处理才是正道,至于写不写看个人喜好
|
16
neverandy 2018-09-19 11:59:06 +08:00
还是看个人习惯吧。两种方式都不应该有什么优越感。不写分号带来的问题,也有解决的方案。我个人还是写分号的,写习惯了。
|
17
SuperMild 2018-09-19 11:59:13 +08:00
不写分号要用 linter,用 linter 是比写不写分号更重要的好习惯。就算写分号也要用 linter。
|
18
kingwl 2018-09-19 12:01:12 +08:00
明明是 feature🤷🏻♂️
|
19
98jiang 2018-09-19 12:02:32 +08:00
写 java 习惯加 2333
|
20
miyalee 2018-09-19 12:02:55 +08:00
不写,靠插件自动补齐
|
21
Desperado2018 2018-09-19 12:04:42 +08:00 2
如果下一行是以[]或者()开头,那么上一行结尾或者下一行开头需要写;
其他情况皆可不写。 |
22
phpcxy 2018-09-19 12:05:06 +08:00
作为一个 PHP 程序员,写 JS 的时候都写分号是很合理的~
|
24
pabupa 2018-09-19 12:06:46 +08:00
语法就不是法了?
|
25
bertonzh 2018-09-19 12:13:46 +08:00
即使你写分号,你能保证你的代码每个结尾都不会漏掉分号吗?个人感觉这比都不加分号要难很多。
如果保证不了,还是需要 eslint。但是既然都用 eslint 了,这个 ‘ BUG ’ 还算问题么? |
26
kernel 2018-09-19 12:14:01 +08:00 2
楼主在不了解不写分号需要在(和[前加;的基本规则下直接开喷也是醉了
另外现在都上 lint,没有出 BUG 这种事 |
27
CodeMan27 2018-09-19 12:20:46 +08:00
if( console.log("hello-world") ) {}
没分号。 |
28
bumz 2018-09-19 12:22:43 +08:00
<blockquote>尤雨溪 到处喷 js 结尾写分号的人</blockquote>
所以应该开头写分号?[滑稽] |
29
lzvezr 2018-09-19 12:24:41 +08:00 via iPhone
typescript 不加分号,编译自动加
|
30
snw 2018-09-19 12:25:44 +08:00 via Android
我记得建议是行开头是这类括号的话,在前面加分号
|
31
hronro 2018-09-19 12:29:04 +08:00
看看 standard js 中对分号使用的定义吧:
https://standardjs.com/rules.html#semicolons |
32
imn1 2018-09-19 12:34:35 +08:00
很久以前,上世纪,上线就出错,查了半天本地没问题啊,看网上源码,发现换行符变了……
后来代码行尾检查也成为日常 当然那时没有什么 lint 工具 |
33
coolcoffee 2018-09-19 12:36:46 +08:00
prettier 了解一下, 你代码不写分号可以,但是可以做 pre-commit 自动触发格式化。
|
34
tinytin 2018-09-19 13:36:49 +08:00 via iPhone
不写,除非必须得写的地方,由 tslint 控制
|
35
kingwl 2018-09-19 13:38:43 +08:00
|
36
Pastsong 2018-09-19 13:41:20 +08:00
无法忍受代码开头里出现
;( 或者 ;[ 所以我选择写分号 |
37
bufpay 2018-09-19 13:42:10 +08:00
还是写一些,不然压缩后可能会出问题
|
39
UIXX 2018-09-19 13:59:04 +08:00
1、团队代码,风格一致优先,入乡随俗
2、个人代码,加不加都行 风格问题有什么好讨论的 |
41
qiaobeier 2018-09-19 14:09:11 +08:00
不写,反正编译器会自己加。 写不写其实无所谓,就怕有写有不写,那就看的难受了
|
43
EPr2hh6LADQWqRVH 2018-09-19 14:20:27 +08:00
|
45
xfriday 2018-09-19 14:30:03 +08:00
不写原生 js 就行了,各大编译器 ts, babel,自己补齐
|
46
SeanChense 2018-09-19 14:31:35 +08:00
JS 不是法外之地
|
47
icris 2018-09-19 14:32:22 +08:00
@hronro #31
我一个格式化每一行都加上分号有什么不好,要按它标准来写 `;[1, 2, 3].forEach(bar)` ?那为什么 ESLint semi 默认值 always ? |
49
kernel 2018-09-19 16:53:41 +08:00
|
51
mewpoi 2018-09-19 17:20:47 +08:00
加分号真的很丑,已经 3-4 年不写分号了,分号让打包自己去处理,而且验证也 semi: 2, never 了,所以项目里如果发现别人写分号会报错,这个问题就好像为什么 js 以前用都""双引号现在改用''单引号的问题一样,就是因为双引号要按两个键,而单引号只要一个键这么简单,开发本来就已经很繁琐了,就不要给自己代码增加负担,结尾能不用分号就不要用,除非你不会打包,如果纯原生的去写,那么加分号无可厚非
|
52
vevlins 2018-09-19 17:29:52 +08:00 via Android
所以,这个问题报错的原因是啥
|
53
adminii 2018-09-19 17:35:17 +08:00
必须写,不然遇到哪些风骚的代码,像前端那些一旦压缩就 6666 了
|
54
EvilCult 2018-09-19 18:03:05 +08:00
外行人有个疑问: 用 lint 后,是不是该提示:map 要 return 了??
|
56
easylee 2018-09-19 18:33:39 +08:00 via Android
写久了 C 和 Java ……不写分号表示难以接受……我连 py 都是加分号的……
|
57
xianxiaobo 2018-09-19 18:35:56 +08:00
习惯写上,看着也舒服些。
|
59
xiangyuecn 2018-09-19 19:51:46 +08:00
加分号不加分号都是对的,只要运行过程和最终结果符合预期就是 ok 的,管你是不加分号还是漏了分号。
{我是要求加分号}; 不加分号的代码看起来就像光着屁股,没错,看 java 就像是光着屁股的。 写花里胡哨的格式都可以,反正最终压缩成一坨代码,嘿嘿 |
60
kisnows 2018-09-19 21:23:11 +08:00
所有括号前加上分号就好了
|
61
liuguang 2018-09-19 21:37:14 +08:00
当然写了,否则压缩时,会报错的
|
62
likaka 2018-09-19 21:45:08 +08:00
学过 java 的都会写,js 不写;,电脑自动加,但电脑傻会加错
|
63
gbin 2018-09-19 21:52:20 +08:00 via Android 2
曾经我在 V2EX 上调侃了一下不写分号的人,结果我换了一个 ID
|
64
fanyingmao 2018-09-19 22:00:32 +08:00 via Android
从 Java 转过来,JS 语法太随意了,不写分号代码看不下去。
|
65
fobven 2018-09-19 22:09:46 +08:00
遇到几个特殊字符在前面加上分号就行了,其余地方统统没必要加,写分号就是浪费时间。
|
66
lyhiving 2018-09-19 22:17:57 +08:00 via iPhone
不写分号的都是初级入门。
|
67
PythonAnswer 2018-09-19 22:20:51 +08:00 via iPhone
偷懒,我不写分号
|
68
royzxq 2018-09-20 01:51:30 +08:00
#66 攻击不可取, 通常这种情况需要手动在上一行结尾或者下一行开始加上分行
建议在下一行开始的地方加,不然你上一行一修改又要翻车了。 ``` ;[1, 2,0, 3].filter(it => !!it) ``` |
70
picture2200 2018-09-20 06:55:24 +08:00 via Android
以前写 juery 时先打一个;,就防止这种问题出现
|
71
brickyang 2018-09-20 07:37:52 +08:00 via iPhone
@kernel #49 你为什么敢用「最」热门来定义 Redux ?其他 js 项目的 star 比它少吗?
|
73
shintendo 2018-09-20 09:34:21 +08:00
不喜欢写分号,一眼看过去脏兮兮的。
关键问题在于,ASI 不会因为你写了分号而关闭,解释器不会因为你写了分号,而知道你没写的地方是真的不想要分号。 |
74
zhwithsweet 2018-09-20 09:37:16 +08:00
我看你你这个头像,就怕你来一波广告。(逃
|
75
fundebug OP @zhwithsweet 小姐姐头像设计得好,自带广告效应
|
76
autoxbc 2018-09-20 10:06:08 +08:00 via iPhone
加分号:我的语句正确结束了,我句首不加,你们别来害我
不加,特例加:你害我也给你挡住,我句尾不加,后边的爱死不死 看起来是两种做人方式 |
78
shyrock 2018-09-20 10:10:54 +08:00 1
一切有利于减少 bug 的规则都是好规则,为了减少 bug,键盘磨损和代码美观算个 P。
|
79
w3sy 2018-09-20 10:26:53 +08:00
Swift 开发看到你们的讨论,瑟瑟发抖。
|
80
898601566 2018-09-20 10:29:17 +08:00
这是个习惯,和语言无关
|
81
marcong95 2018-09-20 10:35:29 +08:00
上个 Linter 有这么痛苦么,为毛这种东西还值得撕。。。
|
82
Yuicon 2018-09-20 10:41:14 +08:00
我 js 和 java 写分号,py 和 go 不写 都是入乡随俗 好像只有 js 有这个争论
|
83
wmhx 2018-09-20 10:44:34 +08:00
加分号,肯定不会出现莫名其妙的问题, 不加就不好说了; 如果你是看前人的代码, 你能接受那一种?
|
86
lincanbin 2018-09-20 11:57:19 +08:00
不想写分号,也得记得用 Lint。
|
87
Fury718 2018-09-20 12:21:00 +08:00 1
@vevlins console.log("Hello, World!") 返回的值是 undefined 结合下一条语句是 undefined[1,2,3] 在这里报错了
|
88
vsomeone 2018-09-20 12:33:28 +08:00
我个人感觉还是加分号的比较好。标准更新要保持兼容性,肯定是首先保证不影响写了分号的代码。如果未来新标准又加入了一个新的运算符号(虽然可能性很小),未加分号的代码很有可能就会产生歧义。至于说编程减负的,其实分号写习惯了根本就不是多大的负担。就如同 Ctrl + S 这个快捷键按着按着就成习惯,自己是不会感到刻意的(说完我就按了一下…)。
|
89
ShareDuck 2018-09-20 12:44:43 +08:00 via Android
加!习惯了。不加觉得丑。
|
90
adjusted 2018-09-20 13:01:35 +08:00 1
我以为有了 prettier 就没有人争论这个了,我还是错了。。。
|
91
SilentDepth 2018-09-20 13:54:03 +08:00
基本上:
` - + / ( [ 这几个字符出现在行首时,前面补分号即可 |
92
blackywkl 2018-09-21 08:32:26 +08:00
分号就像断句啊。。。。
|
95
fundebug OP @SilentDepth 这样太麻烦了吧....很可能忘掉
|
96
SilentDepth 2018-09-26 09:56:24 +08:00
@fundebug #95 看起来是麻烦,但实际上这些情况能遇到的并不多,习惯即可。另外,现代 IDE (比如 WebStorm )可以自动识别这类情况并给出潜在错误提示
|
97
fundebug OP @SilentDepth 那也行,只要没 BUG 就好
|