为什么那么多人写 js 不喜欢加分号 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
caniuse
V2EX    程序员

为什么那么多人写 js 不喜欢加分号

  •  1
     
  •   caniuse 2017-06-01 14:24:53 +08:00 23869 次点击
    这是一个创建于 3056 天前的主题,其中的信息可能已经有所发展或是发生改变。
    129 条回复    2019-07-26 09:31:23 +08:00
    1  2  
    luoyou1014
        1
    luoyou1014  
       2017-06-01 14:29:08 +08:00
    现在众多框架已经不推荐加分号了,ESLint 直接报错,不加还能少敲个键,换行的时候也方便点。
    sharkspeed
        2
    sharkspeed  
       2017-06-01 14:30:45 +08:00
    Lazy
    U7Q5tLAex2FI0o0g
        3
    U7Q5tLAex2FI0o0g  
       2017-06-01 14:34:06 +08:00
    我个人倾向于加。
    noe132
        4
    noe132  
       2017-06-01 14:34:58 +08:00
    其实加不加我都能接受。不过习惯上还是加分号。
    dong3580
        5
    dong3580  
       2017-06-01 14:35:47 +08:00
    强迫症,受不了不加分号的代码,
    caniuse
        6
    caniuse  
    OP
       2017-06-01 14:35:50 +08:00
    @littleylv 我也是,加上看起来舒服些,我还写 PHP,PHP 是不可以省略分号的
    caniuse
        7
    caniuse  
    OP
       2017-06-01 14:36:03 +08:00
    @dong3580 哈哈哈 我也是
    dong3580
        8
    dong3580  
       2017-06-01 14:37:50 +08:00
    @caniuse
    以前写 C#,都是用的双引号。
    我看到 jslint 推荐写 js 用单引号,看到 js 代码里面大量的双引号,也受不了,双引号明明增加流量。。。不利于节能减排啊。
    U7Q5tLAex2FI0o0g
        9
    U7Q5tLAex2FI0o0g  
       2017-06-01 14:39:14 +08:00   3
    @dong3580 #5 强迫症还受不了你句子后面的逗号
    qualleding
        10
    qualleding  
       2017-06-01 14:40:25 +08:00
    @dong3580 双引号增加流量是怎么来的...
    Mitt
        11
    Mitt  
       2017-06-01 14:40:50 +08:00
    只有我觉得不加分号很难受的么,可能是因为我写 C++和 Php 时间太长了。。
    Thoxvi
        12
    Thoxvi  
       2017-06-01 14:41:10 +08:00 via Android
    js 压缩的时候不写分号不是容易炸吗…
    u5f20u98de
        13
    u5f20u98de  
       2017-06-01 14:41:21 +08:00
    本来我也加的,结果 go 写习惯了 js 也不加了,挺好的省事
    后遗症是写 java 和 php 的时候很挺难受
    choury
        14
    choury  
       2017-06-01 14:42:01 +08:00 via Android
    写 golang 写习惯就不加分号了……
    dozer47528
        15
    dozer47528  
       2017-06-01 14:43:46 +08:00
    @qualleding 哈哈哈哈,打印的时候浪费油墨倒是真的
    Mitt
        16
    Mitt  
       2017-06-01 14:44:13 +08:00
    @dong3580 双引号增加流量? " 和 ' 是一样的啊 都是 char[1]
    jugelizi
        17
    jugelizi  
       2017-06-01 14:45:49 +08:00
    py 也不要
    dong3580
        18
    dong3580  
       2017-06-01 14:48:17 +08:00
    @Mitt
    @qualleding
    闹笑话了……感觉上,感觉上,哈哈

    """
    '''
    Chappako
        19
    Chappako  
       2017-06-01 14:48:40 +08:00
    vue.js 官方推荐不加分号,所以就不再加了
    qiaobeier
        20
    qiaobeier  
       2017-06-01 14:51:30 +08:00
    写 ES6 后不加了。
    mogita
        21
    mogita  
       2017-06-01 14:59:26 +08:00
    用上 Javascript Standard Style 之后不加了,舒爽。
    MrWii
        22
    MrWii  
       2017-06-01 15:10:24 +08:00
    @dong3580 你这个理由明显不成立啊,不如说 ' 比 " 少按一个键呢
    FrankFang128
        23
    FrankFang128  
       2017-06-01 15:12:14 +08:00
    因为前端开发者就是讨厌旧东西,包括旧的 Style。
    viator42
        24
    viator42  
       2017-06-01 15:19:44 +08:00
    蛤?写 js 居然不加分号了,退前端好久了都不知道
    SuperMild
        25
    SuperMild  
       2017-06-01 15:25:17 +08:00
    既然可以不加,自然有人选择不加。既然又可以加,自然出现加和不加两派。其实不给选项硬性规定最好,无意义的分派。
    hiboshi
        26
    hiboshi  
       2017-06-01 15:29:41 +08:00
    有的情况下必须加
    比如
    写了两行正则
    var test1 = //
    var test2 = //

    然后 这段代码 被 minify 压缩了,就是造成 JS 报错 解决办法就是 每个 正则后面加上分号
    denano
        27
    denano  
       2017-06-01 15:30:36 +08:00
    虽然是习惯问题,但是现在越来越推崇不加分号了。。
    因为没必要加,除了一些特殊情况需要在行开头加分号,其余的编译器会帮你自动断句
    https://github.com/feross/standard/blob/master/RULES.md#semicolons
    mufeng
        28
    mufeng  
       2017-06-01 15:33:16 +08:00
    现在基本不加分号了
    coolcoffee
        29
    coolcoffee  
       2017-06-01 15:40:25 +08:00   3
    下面代码压缩后就炸了。

    (function(){
    console.log(1);
    })()

    (function(){
    console.log(2);
    })()
    crashX
        30
    crashX  
       2017-06-01 15:42:43 +08:00
    不加分号是现代语言的趋势,LZ 从了吧。
    sparkle2015
        31
    sparkle2015  
       2017-06-01 15:44:08 +08:00
    ruby 写多了,就不习惯加分号了。
    AsherG
        32
    AsherG  
       2017-06-01 15:44:23 +08:00
    我 vs 装了 resharper,js 行尾不加分号就会被划上波浪线
    Cbdy
        33
    Cbdy  
       2017-06-01 15:44:41 +08:00   2
    @coolcoffee 有经验的程序员会这样写
    ;(function(){})();
    wangleineo
        34
    wangleineo  
       2017-06-01 15:49:19 +08:00
    因为是 python 程序员
    U7Q5tLAex2FI0o0g
        35
    U7Q5tLAex2FI0o0g  
       2017-06-01 15:56:00 +08:00   1
    @coolcoffee #29
    实际上,不加并不等于全都不加了。
    实际上,规范的写法并不是“(function(){” ,而是在前面加分号“;(function(){”
    SoloCompany
        36
    SoloCompany  
       2017-06-01 16:04:07 +08:00
    standard 是不加

    反正我是加

    前端高大上不断的闹革命,在他们看来,如果有两个相似的选项,那肯定会选择一个和以前不相容的选项
    SoloCompany
        37
    SoloCompany  
       2017-06-01 16:07:40 +08:00
    多扯淡一下,kotlin 的官方推荐标准也是不加
    这个我遵循了
    因为毕竟是新语言

    对于 js 这类背着一大堆历史包袱的老旧语言,即便 es5678 玩出了花,那还得兼容吧?一个分号可以消除所有歧义,何必费脑筋
    ChefIsAwesome
        38
    ChefIsAwesome  
       2017-06-01 16:10:44 +08:00
    1. 除非彻底改成缩进式的语法,不然代码里头还是有各种符号,看着还是不够清爽。
    2. JS 在某些情况下不写分号会出错。为了不写分号,我们就得记着哪些场景必须要写,浪费脑细胞。这些场景写了分号之后,跟其他不写分号的地方一对比,看起来又是很奇怪。

    所以我选择写分号。
    doubleflower
        39
    doubleflower  
       2017-06-01 16:17:26 +08:00
    知道这个很流行的 JS 强制书写风格项目吗?推荐不加分号。

    https://standardjs.com/

    建议用起来,搭配 flow 食用更佳。
    jtsai
        40
    jtsai  
       2017-06-01 16:22:38 +08:00 via Android
    以前加 Python 写多了 而且看 微信小程序不加 就不加了
    autoxbc
        41
    autoxbc  
       2017-06-01 16:26:20 +08:00
    我把分号理解成和注释一样的东西,不是给机器看的,是给人看的

    如果自己写的程序打开一看某行没分号,只有两种可能:文件损坏,上次写到那被意外中断
    tomoya92
        42
    tomoya92  
       2017-06-01 16:30:39 +08:00
    新出的语言都不加了,不过我写的项目里,有的带,有的不带,也挺乱的
    seki
        43
    seki  
       2017-06-01 16:42:44 +08:00
    加分号是告诉解释器,这里该断句了。如果解释器自己就知道怎么断句,自己手加分号就已经不是一个必要,而只是个人喜好
    都 2017 年了,加和不加不就是 eslint 的一条规则的事……喜欢加就加吧
    caniuse
        44
    caniuse  
    OP
       2017-06-01 16:57:31 +08:00
    不加分号和刚开始接触 jsx 语法时候一样,看起来很不舒服
    fds
        45
    fds  
       2017-06-01 17:01:57 +08:00
    视觉干扰越少越好呀,反正有换行了。一般必须加分号的地方 lint 会提示,而且这种情况很少了,我最近遇到的只有下面这种展开必须用到括号时,前面要加分号:
    ({ board, sn } = incSn(board, "counter"))
    misaka19000
        46
    misaka19000  
       2017-06-01 17:02:39 +08:00
    一个分号占一个字节,浪费空间
    holy_sin
        47
    holy_sin  
       2017-06-01 17:06:34 +08:00
    少打一个字是一个字
    Phariel
        48
    Phariel  
       2017-06-01 17:09:46 +08:00 via Android
    强迫症 并且 WebStorm 默认规则是不加分号要高亮提示 所以必加
    BOYPT
        49
    BOYPT  
       2017-06-01 17:12:39 +08:00
    你可以把写分号的 js 和不写的看成两种语言;不写的叫 es6/7+++
    bumz
        50
    bumz  
       2017-06-01 17:14:57 +08:00
    @ChefIsAwesome #38 必须写分号的场合除了 for 内部,就是以括号开头了吧

    以括号开头的情况只要加一个一元运算符就行了

    !function(){}()
    !function(){}()

    风格统一就行了
    JerryCha
        51
    JerryCha  
       2017-06-01 17:24:41 +08:00
    不加分号心里还是有点慌的
    可能因为我一直都在写 C 的缘故
    skadi
        52
    skadi  
       2017-06-01 17:26:17 +08:00 via Android
    分号战争
    shunia
        53
    shunia  
       2017-06-01 17:26:28 +08:00
    一年前看到讨论这个问题的时候,大部分还是倾向于加.
    这才多久,就这一个标准那一个标准的,倾向于不加了.
    js 界真的是不嫌事儿多.
    crossoverJie
        54
    crossoverJie  
       2017-06-01 17:33:51 +08:00
    Java 写习惯了
    circleee
        55
    circleee  
       2017-06-01 17:43:14 +08:00
    我发现新的语言都开始 要不加分号啦
    wangjie
        56
    wangjie  
       2017-06-01 17:45:55 +08:00
    看到前面有说写 php 的,我又写 php 又写 golang 都没说啥。。。
    chunqiuyiyu
        57
    chunqiuyiyu  
       2017-06-01 17:56:50 +08:00 via iPhone
    强迫症患者,看到没分号就想加上。
    Rocka
        58
    Rocka  
       2017-06-01 18:03:39 +08:00 via Android   1
    感觉那个 Standard JS 规范看着真是难受,2 格缩进而且不加分号,简直是异端中的异端…
    chiu
        59
    chiu  
       2017-06-01 18:08:45 +08:00 via Android
    我是强迫症受不了不加分号的代码
    caniuse
        60
    caniuse  
    OP
       2017-06-01 18:15:10 +08:00
    @Rocka 哈哈哈 我以前也是方案 4 格缩进 但是最近 react 写多了 习惯 2 格了 因为 4 格的话 屏幕显示不下了
    caniuse
        61
    caniuse  
    OP
       2017-06-01 18:15:21 +08:00
    反感
    caniuse
        62
    caniuse  
    OP
       2017-06-01 18:16:02 +08:00
    @chunqiuyiyu 我也是啊,没分号感觉好变扭,到现在也没习惯
    caniuse
        63
    caniuse  
    OP
       2017-06-01 18:16:23 +08:00
    @wangjie 我写 php go js
    wujunze
        64
    wujunze  
       2017-06-01 18:21:36 +08:00
    @Thoxvi #12 对啊 同问 js 压缩的时候不写分号不是容易炸吗?
    wangjie
        65
    wangjie  
       2017-06-01 18:24:18 +08:00
    @caniuse #63 我已经习惯了不加分号了。。。
    Krime
        66
    Krime  
       2017-06-01 18:38:40 +08:00
    嗯,就算 JS 不压缩, ( [ / + - 开头的语句还是会和上一行一起执行,导致意外爆炸。
    @wujunze 要时刻注意这么多符号还是太累了,除非 JS 的语法标准解决这个歧义问题,不然我还是选择统一加分号,毕竟加分号已经是下意识反应了。
    wujunze
        67
    wujunze  
       2017-06-01 18:41:02 +08:00
    @Krime #66 我习惯性的加分号 感觉加分号代码看起来比较清晰
    Cbdy
        68
    Cbdy  
       2017-06-01 18:46:16 +08:00
    @SoloCompany 其实这是一个很简单的问题:用 es6、7 写的代码,有多少人不经过 babel 直接放到浏览器中跑?
    因此,我们可以从两个方面看待 Javascript:服务端 js 和客户端 js,客户端 js 需要加分号,服务端不需要
    MrJing1992
        69
    MrJing1992  
       2017-06-01 18:48:54 +08:00
    我就想问问,不加分号的 js 代码,最终由 babel 编译压缩后,加了没。
    caniuse
        70
    caniuse  
    OP
       2017-06-01 18:52:20 +08:00
    @Cbdy 我们团队风格是前后端都不加分号 react angular antd stylus es6
    caniuse
        71
    caniuse  
    OP
       2017-06-01 18:58:43 +08:00
    后端 koa
    loveminds
        72
    loveminds  
       2017-06-01 18:59:53 +08:00
    不喜欢
    Rice
        73
    Rice  
       2017-06-01 19:00:34 +08:00 via iPhone
    不加才是正道
    SuperMild
        74
    SuperMild  
       2017-06-01 19:04:49 +08:00
    可见 Golang 吸收了别的语言的经验教训,从一开始就提供了 gofmt 代码格式化工具是多么明智。
    caniuse
        75
    caniuse  
    OP
       2017-06-01 19:26:14 +08:00
    @SuperMild 我想用 golang 开发个分布式推送系统 能用那些东西呢? 不想用 java 写的 zookeeper、kafka
    Cbdy
        76
    Cbdy  
       2017-06-01 19:28:22 +08:00   1
    @caniuse 您说的很有道理,我本身是后端,js 不算很了解,刚刚看完这个帖子专门去学习了一下 js 的 asi ( auto semicolon insertion ),我收回刚刚说的区分前后端 js 的言论,那个说法不合理。

    我现在认为更好的做法是从 js 本身出发,了解不加分号会怎样导致问题,asi 的工作机理,然后不加分号。因为我注意到在不了解机理的情况下去加分号只是一种鸵鸟策略,并不能解决所有问题,分享刚刚学习的一篇文章
    http://justjavac.com/Javascript/2013/04/22/automatic-semicolon-insertion-in-Javascript.html
    timelessg
        77
    timelessg  
       2017-06-01 19:33:23 +08:00 via Android
    我写 swift 也不加
    jason19659
        78
    jason19659  
       2017-06-01 19:34:39 +08:00
    ;
    changwei
        79
    changwei  
       2017-06-01 19:34:41 +08:00 via Android
    节省键盘寿命
    dallaslu
        80
    dallaslu  
       2017-06-01 19:38:57 +08:00
    这种编程风格、语言规范的冲突问题,都应该由 IDE 解决。

    你喜欢加分号,你打开所有的源代码,每行行尾该有分号的地方就都有分号;其他人不喜欢分号,他们看到的源代码就没没有分号。IDE 在查看时自动处理分号的显示与隐藏,保存到硬盘时以相同的策略转换到某一标准编程规范,这样就能与版本工具完美协作。

    发布时,同样可以指定一个策略,输出某种风格的压缩代码。

    这样,我们就不必要争论花括号要不要另起一行、缩进是制表符还是 4 个空格、if / while 等控制语句后面只有一句话时要不要括号、body 与 head 要不要缩进、br 要不要闭合、多少个字符就要换一行、赋值语句里等号前面要不要有个空格,等等等等没有实际意义的口水战话题。这样,我们至少可以把更多的精力用在「变量命名里用不用下划线」以及「用拼音还是英文起名字」这种稍稍有点高度的问题上(尽管这俩问题也没有太大的意义)。

    然而绝大多数 IDE 可能并没有注意到这个需求。单从语法上讲,Kotlin 与 Java 语法迥异,但仍完美协作;各 IDE 应该参考于此,来实现其他语种的方言支持!
    sox
        81
    sox  
       2017-06-01 19:47:08 +08:00
    不知道你为什么又开一个帖问这种月经问题,先搜索一下可以吗 :)
    viko16
        82
    viko16  
       2017-06-01 19:49:57 +08:00
    eslint --fix

    standard --fix

    配置能解决的问题就不算是问题了吧~
    dant
        83
    dant  
       2017-06-01 19:53:12 +08:00
    你以为加了分号就不会在你不希望出现分号的地方自动插入分号了吗(
    doctorlai
        84
    doctorlai  
       2017-06-01 20:28:46 +08:00
    不加分号, 无法混淆吧。
    codehz
        85
    codehz  
       2017-06-01 21:55:38 +08:00
    @coolcoffee #29 压缩的问题,应该是压缩器的问题。。。因为压缩代码应该要保证语义不变的
    iAcn
        86
    iAcn  
       2017-06-01 21:56:22 +08:00 via Android
    用习惯 Python 的单引号之后再用 Java 的双引号感觉好难受
    halden
        87
    halden  
       2017-06-01 22:04:05 +08:00
    本来我一个专业搞前端的写着 js 就是从来不加,偶尔用 node 也没这习惯。最近公司把我扯去写 php,经常忘记加然后各种报错,现在觉得 ; 简直反人类。。
    ChiChou
        88
    ChiChou  
       2017-06-01 22:14:01 +08:00
    pandasjw
        89
    pandasjw  
       2017-06-01 22:51:32 +08:00 via Android
    加不加都能接受
    Kei
        90
    Kei  
       2017-06-01 23:03:36 +08:00
    只需要知道什么时候要加,其余情况就都不加
    压缩代码会用专门的工具,而不是纯粹把空格换行符去掉
    sensui7
        91
    sensui7  
       2017-06-02 01:07:40 +08:00
    bootstrap 不加, vue 也不加, eslint 也不推荐加,
    tlday
        92
    tlday  
       2017-06-02 03:22:43 +08:00 via Android
    个人不加,倾向于靠合理清晰的缩进标识代码结构
    tlday
        93
    tlday  
       2017-06-02 03:26:47 +08:00 via Android
    个人认为编程语言必须行尾加分号是早期对编译器的妥协。另外,看下楼里句尾加句号的人的比例,再对比下说写代码要加分号的比例应该是个比较有意思的数据。
    Chingim
        94
    Chingim  
       2017-06-02 07:54:17 +08:00 via Android
    看到分号难受,不写。引擎的 asi 会帮你处理好的
    wakaka
        95
    wakaka  
       2017-06-02 08:24:46 +08:00
    最后 prettier 一下就整齐了
    def1984
        96
    def1984  
       2017-06-02 09:05:17 +08:00
    写 swift 习惯了
    jixiangqd
        97
    jixiangqd  
       2017-06-02 09:17:31 +08:00
    应该问 “为什么 js 允许程序员不写分号?”
    ly710
        98
    ly710  
       2017-06-02 09:20:15 +08:00
    很蛋疼,我本来看 redux 的文档发现上面的代码都是不加分号的,然后我也喜欢不加分号。后来再看其他的文档都是加了分号的,而且用了 airbnb 的代码规范貌似是规定要加分号的,我又改回来了。
    SourceMan
        99
    SourceMan  
       2017-06-02 09:25:32 +08:00
    我就只说一句

    编译后默认全部都是有分号的
    reallarry
        100
    reallarry  
       2017-06-02 09:30:26 +08:00 via Android
    Javascript 的 ASI(Auto Semicolon Insertion) 机制,但还是自己打上分号比较好
    1  2  
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3139 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 41ms UTC 12:23 PVG 20:23 LAX 05:23 JFK 08:23
    Do have faith in what you're doing.
    ubao 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