V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
Gem

现在,写 JS 带不带分号?

  •  
  •   Gem · Dec 3, 2015 · 8992 views
    This topic created in 3801 days ago, the information mentioned may be changed or developed.
    es6 出来,一些特性越来越接近 python ,写的时候也越来越不想带分号了,大家现在情况怎样?
    69 replies    2015-12-04 10:10:55 +08:00
    think2011
        1
    think2011  
       Dec 3, 2015
    早期写过 coffeescript ,算是养成了简洁的习惯,现在靠 webstorm 的默认格式约束。
    think2011
        2
    think2011  
       Dec 3, 2015
    想表达的是说,因为现在主要的编辑器是 webstorm ,如果缺少分号 webstorm 会提示的,所以我就靠 webstorm 的默认格式化。
    lion9527
        3
    lion9527  
       Dec 3, 2015
    带吧,不过我是业余玩票的。看的书上是建议带。 ES6 还不熟。
    otakustay
        4
    otakustay  
       Dec 3, 2015   ❤️ 4
    最近在着手做公司的编码规范, ES6 如果使用全带分号的写法的话,在 ES7 的 Decorator 上会遇上不小麻烦
    如果选全不带分号的话,在对象字面量里遇到 Computed Property Key 的时候会遇上些麻烦

    所以简单来说就是, ES 垃圾!
    Rice
        5
    Rice  
       Dec 3, 2015 via Android
    多大的事这也问
    liqingcan
        6
    liqingcan  
       Dec 3, 2015
    @Rice 为了养成好习惯,哈哈
    otakustay
        7
    otakustay  
       Dec 3, 2015
    上面有点说错,不是对象字面量里遇到 Computed Property Key ,是在 Decorator 撞上一个 Computed Property Key 的时候

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


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

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

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

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

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

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

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

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

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

    这些项目的 JS 代码都不加分号。
    exoticknight
        41
    exoticknight  
       Dec 3, 2015
    可以不加
    zythum
        42
    zythum  
       Dec 3, 2015
    @hbkdsm

    然而
    angular
    ember
    jquery
    react

    这些项目的 JS 代码都加分号。
    18000rpm
        43
    18000rpm  
       Dec 3, 2015
    JS 写的少。搜了一下,原来这个争论已经有些历史了

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

    比如楼上某处的

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

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


    我刚才稍微想了下觉得是 python 强制缩进所以不能这么用,但其实还是语言设计上的区别,不仅是缩进引起。
    wizardoz
        58
    wizardoz  
       Dec 3, 2015
    不带分好编辑器会警告,所以我带
    xwartz
        59
    xwartz  
       Dec 3, 2015
    我也不喜欢写分号,但是团队已有项目写分号,只有遵循了。
    M4ster
        60
    M4ster  
       Dec 4, 2015
    一般都用 CoffeeScript , IDE 对它的支持也好。
    pynix
        61
    pynix  
       Dec 4, 2015
    能不用则不用。。。
    xifangczy
        62
    xifangczy  
       Dec 4, 2015
    前端丢来的 js 都是不带分号的,因为一次 BUG 因为没有分号的原因以后每次都要求要带上分号...
    babytomas
        63
    babytomas  
       Dec 4, 2015 via Android
    document.write("我觉得分号还是很有必要的,这个看团队要求吧");
    ghostheaven
        64
    ghostheaven  
       Dec 4, 2015
    坚持加分号 30 年
    zeroten
        65
    zeroten  
       Dec 4, 2015 via Android
    弱弱问一下,不加分号会不会影响 js 压缩
    onlyice
        66
    onlyice  
       Dec 4, 2015
    当年写 C++ 的时候觉得写 JS 也要加,现在写 Python 觉得 JS 能不加就不加。
    Felldeadbird
        67
    Felldeadbird  
       Dec 4, 2015
    写!你做手工压缩的时候,你会发现没有分号会导致 JS 执行失败。当然大部分开源的压缩库都会处理的。
    sxd
        68
    sxd  
       Dec 4, 2015
    对 我发现好几个老外出教程 都不写分号了 还以为是趋势了...
    dong3580
        69
    dong3580  
       Dec 4, 2015
    @sxd
    还有人喜欢双引,有人喜欢引号,
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5134 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 165ms · UTC 05:59 · PVG 13:59 · LAX 22:59 · JFK 01:59
    ♥ Do have faith in what you're doing.