现在,写 JS 带不带分号? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
Gem
V2EX    Javascript

现在,写 JS 带不带分号?

  •  
  •   Gem 2015-12-03 13:02:01 +08:00 8761 次点击
    这是一个创建于 3675 天前的主题,其中的信息可能已经有所发展或是发生改变。
    es6 出来,一些特性越来越接近 python ,写的时候也越来越不想带分号了,大家现在情况怎样?
    69 条回复    2015-12-04 10:10:55 +08:00
    think2011
        1
    think2011  
       2015-12-03 13:07:50 +08:00
    早期写过 coffeescript ,算是养成了简洁的习惯,现在靠 webstorm 的默认格式约束。
    think2011
        2
    think2011  
       2015-12-03 13:09:26 +08:00
    想表达的是说,因为现在主要的编辑器是 webstorm ,如果缺少分号 webstorm 会提示的,所以我就靠 webstorm 的默认格式化。
    lion9527
        3
    lion9527  
       2015-12-03 13:24:02 +08:00
    带吧,不过我是业余玩票的。看的书上是建议带。 ES6 还不熟。
    otakustay
        4
    otakustay  
       2015-12-03 13:27:48 +08:00   4
    最近在着手做公司的编码规范, ES6 如果使用全带分号的写法的话,在 ES7 的 Decorator 上会遇上不小麻烦
    如果选全不带分号的话,在对象字面量里遇到 Computed Property Key 的时候会遇上些麻烦

    所以简单来说就是, ES 垃圾!
    Rice
        5
    Rice  
       2015-12-03 13:28:10 +08:00 via Android
    多大的事这也问
    liqingcan
        6
    liqingcan  
       2015-12-03 13:29:40 +08:00
    @Rice 为了养成好习惯,哈哈
    otakustay
        7
    otakustay  
       2015-12-03 13:30:54 +08:00
    上面有点说错,不是对象字面量里遇到 Computed Property Key ,是在 Decorator 撞上一个 Computed Property Key 的时候

    大部分情况下是没关系的,只有下一条语句是以[或者(起始的时候,上面才必须分号结束,但这种语句太少太少
    FrankFang128
        8
    FrankFang128  
       2015-12-03 13:34:36 +08:00
    按你的团队规范来!
    反正我是不带的。
    FrankFang128
        9
    FrankFang128  
       2015-12-03 13:35:39 +08:00
    @otakustay 那就很简单了,规范写成『在必要的时候加分号』
    qhxin
        10
    qhxin  
       2015-12-03 13:44:51 +08:00
    分号不是必须的吧?
    learnshare
        11
    learnshare  
       2015-12-03 13:57:37 +08:00
    必须加,这是共识
    otakustay
        12
    otakustay  
       2015-12-03 14:11:00 +08:00
    @FrankFang128 规范还是得写明白,事实上没多少人知道什么是“必要的时候”,不如拿这个当面试题坑人去


    @learnshare 哪来的共识,随便给你找几个:

    airbnb : https://github.com/airbnb/Javascript#semicolons
    github (虽然是以 coffee 为主): https://github.com/styleguide/Javascript

    虽然现在确实加分号是主流,但还没到“共识”这个程度,不加分号是可以运行得好好的
    sleepwater
        13
    sleepwater  
       2015-12-03 14:11:56 +08:00
    项目内部统一就行, bootstrap 的 js 源码就是没分号的,不过个人还是习惯加分号。
    otakustay
        14
    otakustay  
       2015-12-03 14:12:10 +08:00
    发错, airbnb 是以分号为主流的,找错

    顺便再给一个调查: https://twitter.com/JavascriptDaily/status/662655515500089344
    FrankFang128
        15
    FrankFang128  
       2015-12-03 14:13:11 +08:00
    @otakustay 知道,我的意思是,规范不一定是『处处用分号』或『处处不用』。
    love
        16
    love  
       2015-12-03 14:33:36 +08:00
    我是不带的,代码看上去清爽多了。只要记住首字符是括号的情况下才需要前面加分号规则就行。
    learnshare
        17
    learnshare  
       2015-12-03 14:52:02 +08:00
    @otakustay 我不能来反驳你,但分号是必须的
    otakustay
        18
    otakustay  
       2015-12-03 15:04:21 +08:00
    @learnshare 我完全不明白不加分号会产生什么问题,是人会看不懂还是机器会看不懂……
    plqws
        19
    plqws  
       2015-12-03 15:16:21 +08:00 via Android
    @otakustay 《语言精粹》里提过
    hkongm
        20
    hkongm  
       2015-12-03 15:30:05 +08:00
    自定了 ESLint 规则
    我们团队规定必须写
    learnshare
        21
    learnshare  
       2015-12-03 15:32:00 +08:00
    @otakustay 看自己喜好咯,大部分不加的情况不会遇到什么问题
    liuxiaoxiaochen
        22
    liuxiaoxiaochen  
       2015-12-03 15:37:14 +08:00
    我觉得还是带吧 毕竟语言直接还是有差异的
    zythum
        23
    zythum  
       2015-12-03 15:50:28 +08:00
    如果你确定不加分号,那么你要清楚你的代码是怎么跑的才行,不然容易出现想不到的问题。

    下面一个栗子, 如果 3 秒内没有发现为什么有问题。请乖乖把分号加回去:

    var aFunction = function () {
    alert(“我是一个方法哈哈哈”)
    }

    (function (
    //我叫一个闭包, 哈哈哈
    ) {})
    aivier
        24
    aivier  
       2015-12-03 16:19:49 +08:00
    过去,现在,将来,都写 =_=
    luoway
        25
    luoway  
       2015-12-03 16:26:26 +08:00
    return
    false;
    fds
        26
    fds  
       2015-12-03 16:30:43 +08:00
    建议还是能加就加。
    如果习惯 python ,那么建议尝试下 coffeescript ,分号大括号都不用啦。
    love
        27
    love  
       2015-12-03 16:32:29 +08:00
    @zythum 你这个不能说明什么问题,因为既然加入不加分号党那一定会遵守首字符 ( [ 前加分号的规定。
    tommyZZM
        28
    tommyZZM  
       2015-12-03 16:32:43 +08:00
    源代码肯定带啊,一切按照 jslint 走就好啦。

    反正后面还要代码合并压缩的
    chemzqm
        29
    chemzqm  
       2015-12-03 16:40:49 +08:00
    http://blog.izs.me/post/2353458699/an-open-letter-to-Javascript-leaders-regarding
    记住几点规则就可以不带了。
    自打不带分号以后,不仅代码码起来更加流畅,看上去也更优雅了
    chopper
        30
    chopper  
       2015-12-03 16:50:04 +08:00
    我只想静静的看你们把缩进换行都去掉
    sox
        31
    sox  
       2015-12-03 17:16:56 +08:00
    To semicolon or not to semicolon; that is **NOT** a question

    https://github.com/yyx990803/semi
    lifeTech
        32
    lifeTech  
       2015-12-03 17:19:45 +08:00
    加分号吧,可阅读性和维护性都更好,不要偷这懒
    jacobbubu
        33
    jacobbubu  
       2015-12-03 17:32:02 +08:00
    我是能不加就不加。但是一旦加了,就要坚持都加。
    daysv
        34
    daysv  
       2015-12-03 17:38:31 +08:00
    加加加加加 webstorm 就是这么烦
    zythum
        35
    zythum  
       2015-12-03 18:19:47 +08:00
    @love 你们有耐心看懂我意思。 "如果 3 秒内没有发现为什么有问题。请乖乖把分号加回去"。
    muzuiget
        36
    muzuiget  
       2015-12-03 18:29:48 +08:00
    一定要加,不加是埋雷作死行为。
    kslr
        37
    kslr  
       2015-12-03 18:37:46 +08:00
    习惯了
    18000rpm
        38
    18000rpm  
       2015-12-03 18:40:55 +08:00 via iPad
    我记得玉伯在博客里也提倡不加,这样的人还是有一些影响力的
    jydeng
        39
    jydeng  
       2015-12-03 18:45:27 +08:00   1
    还是要加,不然感觉不对, c#写习惯了。
    hbkdsm
        40
    hbkdsm  
       2015-12-03 18:46:37 +08:00 via Android
    vue
    bootstrap
    npm

    这些项目的 JS 代码都不加分号。
    exoticknight
        41
    exoticknight  
       2015-12-03 18:53:39 +08:00
    可以不加
    zythum
        42
    zythum  
       2015-12-03 19:00:01 +08:00
    @hbkdsm

    然而
    angular
    ember
    jquery
    react

    这些项目的 JS 代码都加分号。
    18000rpm
        43
    18000rpm  
       2015-12-03 19:07:39 +08:00
    JS 写的少。搜了一下,原来这个争论已经有些历史了

    http://www.zhihu.com/question/20298345
    Phariel
        44
    Phariel  
       2015-12-03 19:07:58 +08:00 via Android
    @daysv 点赞 强迫症不能忍 加上后 warning 消失才舒服。。。
    hbkdsm
        45
    hbkdsm  
       2015-12-03 19:08:00 +08:00 via Android
    @zythum 所以这是一个风格问题呀。有 Java, PHP 背景的倾向于加分号,有 Python, Ruby 背景的倾向于不加,按照团队的 Style guide 来就好。
    behappy
        46
    behappy  
       2015-12-03 19:11:46 +08:00
    团队不要求加。。。
    但是还是觉得加分好比较好。
    SilentDepth
        47
    SilentDepth  
       2015-12-03 19:30:15 +08:00
    我想问一下,主张不加分号的理由或者原因是什么?
    an168bang521
        48
    an168bang521  
       2015-12-03 19:40:49 +08:00
    我基本都是加的,不加分号感觉没有结束一样,会感觉心里怪怪的;
    webStorm 里也会提示;
    加不加看个人习惯把,如果不加,压缩 Javascript 代码时候,不给力的压缩网站,可能会出现未知错误(一般情况下,有些地方不加分号压缩好像也没啥事);
    还有就是印象中好像在 Javascript 高程三还是那本书里看到,说如果不加分号做结束,浏览器会自动判断并且给适当的位置添加分号进行解析;如果加了分号,就不需要浏览器去判断,可以直接解析代码,说是可以提高浏览器性能;
    感觉还是推荐加,不加分号总觉得怪怪的;
    xmbaozi
        49
    xmbaozi  
       2015-12-03 19:42:36 +08:00 via Android
    带,除了 d3js
    FrankFang128
        50
    FrankFang128  
       2015-12-03 19:47:01 +08:00
    说 WebStorm 提示的,都是不会配置么?
    zhuangzhuang1988
        51
    zhuangzhuang1988  
       2015-12-03 20:13:00 +08:00
    加, 肯定得加入的, 即使我用 typescript 都加入的
    sox
        52
    sox  
       2015-12-03 20:20:01 +08:00
    知道什么时候不加有问题,所以不加,只在必须加的是后加。

    比如楼上某处的

    ;(function ...
    Tink
        53
    Tink  
    PRO
       2015-12-03 20:20:42 +08:00
    不带啊
    BOYPT
        54
    BOYPT  
       2015-12-03 20:21:46 +08:00
    python 有强制缩进,每一行很明确; js 没这个特性,必须加。
    love
        55
    love  
       2015-12-03 21:52:48 +08:00
    @BOYPT 莫明奇妙的推论, js 没有强制缩进不是有花括号吗,这和加不加分号有什么关系
    love
        56
    love  
       2015-12-03 21:59:30 +08:00
    而且很多有影响力的项目不加分号说明这种做法是完全没有问题的,这只是个象缩进用 tab 还是空格一样的风格问题,比如牛 b 的 rackt 家的所有项目都不加分号。
    BOYPT
        57
    BOYPT  
       2015-12-03 22:47:24 +08:00
    @love 缩进是没什么关系,比如很多 jquery 代码是这样的

    $.ajax()
    .done(function () {blablabla;})
    .fail(function () {blablabla;})
    .always(function () {blablabla;});


    我刚才稍微想了下觉得是 python 强制缩进所以不能这么用,但其实还是语言设计上的区别,不仅是缩进引起。
    wizardoz
        58
    wizardoz  
       2015-12-03 23:12:30 +08:00
    不带分好编辑器会警告,所以我带
    xwartz
        59
    xwartz  
       2015-12-03 23:53:03 +08:00
    我也不喜欢写分号,但是团队已有项目写分号,只有遵循了。
    M4ster
        60
    M4ster  
       2015-12-04 00:00:42 +08:00
    一般都用 CoffeeScript , IDE 对它的支持也好。
    pynix
        61
    pynix  
       2015-12-04 02:31:29 +08:00
    能不用则不用。。。
    xifangczy
        62
    xifangczy  
       2015-12-04 05:21:05 +08:00
    前端丢来的 js 都是不带分号的,因为一次 BUG 因为没有分号的原因以后每次都要求要带上分号...
    babytomas
        63
    babytomas  
       2015-12-04 08:10:18 +08:00 via Android
    document.write("我觉得分号还是很有必要的,这个看团队要求吧");
    ghostheaven
        64
    ghostheaven  
       2015-12-04 08:32:12 +08:00
    坚持加分号 30 年
    zeroten
        65
    zeroten  
       2015-12-04 09:07:41 +08:00 via Android
    弱弱问一下,不加分号会不会影响 js 压缩
    onlyice
        66
    onlyice  
       2015-12-04 09:12:55 +08:00
    当年写 C++ 的时候觉得写 JS 也要加,现在写 Python 觉得 JS 能不加就不加。
    Felldeadbird
        67
    Felldeadbird  
       2015-12-04 09:24:47 +08:00
    写!你做手工压缩的时候,你会发现没有分号会导致 JS 执行失败。当然大部分开源的压缩库都会处理的。
    sxd
        68
    sxd  
       2015-12-04 09:35:12 +08:00
    对 我发现好几个老外出教程 都不写分号了 还以为是趋势了...
    dong3580
        69
    dong3580  
       2015-12-04 10:10:55 +08:00
    @sxd
    还有人喜欢双引,有人喜欢引号,
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5642 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 02:06 PVG 10:06 LAX 18:06 JFK 21:06
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86