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 · 8201 次点击
    这是一个创建于 3312 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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  
       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   ·   实用小工具   ·   2837 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 02:24 · PVG 10:24 · LAX 18:24 · JFK 21:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.