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 ![]() 看到 尤雨溪 到处喷 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 ![]() 我 tslint 的规则是不写分号 |
9 TomatoYuyuko 2018-09-19 11:40:02 +08:00 ![]() 已经养成习惯写了,也不费事,看到光屁股代码浑身难受 |
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 ![]() 如果下一行是以[]或者()开头,那么上一行结尾或者下一行开头需要写; 其他情况皆可不写。 |
![]() | 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 ![]() 楼主在不了解不写分号需要在(和[前加;的基本规则下直接开喷也是醉了 另外现在都上 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 ![]() 曾经我在 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 ![]() 一切有利于减少 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 ![]() @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 218-09-20 13:01:35 +08:00 ![]() 我以为有了 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 就好 |