• 请不要在回答技术问题时复制粘贴 AI 生成的内容
chaegumi
V2EX  ›  程序员

javascript 一行结束要不要加分号?

  •  
  •   chaegumi ·
    chaegumi · Oct 24, 2016 · 19520 views
    This topic created in 3664 days ago, the information mentioned may be changed or developed.
    在我印象中是要加的,但是最新在学习 electron 和 vue.js 时,文档和例子中的代码,很多发现都没有加,很不习惯,我写 php 的时候也加了。

    我想知道标准的做法。
    83 replies  •  2018-03-06 15:28:36 +08:00
    chaegumi
    chaegumi
    OP
    Oct 24, 2016
    1
    还有学习 html 的时候 单标签结束,印象中都是 这样的,/>,现在看的很多前端文档,里边又不要这样了。
    hanzichi
    hanzichi
    Oct 24, 2016
    2
    PHP 是强制要加的吧, JavaScript 不是必须的

    不过本人封号党 ...
    ansheng
    ansheng
    Oct 24, 2016
    3
    单纯的 js 是要加上的,因为你用了构建工具,所以他会自动的帮你加上,
    zhuangtongfa
    zhuangtongfa
    Oct 24, 2016
    4
    如果你写 JS 代码不喜欢带分号,而又搞不清什么时候必须加分号,可以这么做:在以 "("、"[" 、"/"、"+"、"-" 开头的语句前面都加上一个分号,如
    ```js
    ;(a + b).toString()
    ```
    66beta
    66beta
    Oct 24, 2016
    5
    你需要 linter
    palmers
    palmers
    Oct 24, 2016
    6
    js 语句结束应该加 `;`
    Keyes
    Keyes
    Oct 24, 2016
    7
    @zhuangtongfa 这个总结 666
    dong3580
    dong3580
    Oct 24, 2016
    8
    要加,不加一般情况也不会报错。然而会为以后留下隐患,可以上个代码检测工具了,
    nullizer
    nullizer
    Oct 24, 2016
    9
    ES6 之后语法越来越像 python 了,箭头函数和一堆函数式风格语句加了分号越看越怪异。
    NemoAlex
    NemoAlex
    Oct 24, 2016❤️3
    10
    1. JS 本身的语法,对于有明确换行的语句,结束的分号是允许不写的。
    2. 过去的主流是写分号,一方面是符合类 C 语言的语法,另一方面,某些工具对于没有分号的处理存在问题。
    3. 现在的主流工具,处理对于不加分号的写法,都没有问题。
    4. 现在的主流写法是不加。
    https://github.com/feross/standard/blob/master/RULES.md#semicolons
    imshawer
    imshawer
    Oct 24, 2016 via Android
    11
    @chaegumi JS 是需要分号的,至于 HTML 加不加 “/” 是由 DOCTYPE 确定的。
    neoblackcap
    neoblackcap
    Oct 24, 2016
    12
    @NemoAlex 然而括号开头的话,那么就要加,这样不如全部都加
    yangxiongguo
    yangxiongguo
    Oct 24, 2016
    13
    大部分不写,有少部分是肌肉记忆写的,与我无关
    FrankFang128
    FrankFang128
    Oct 24, 2016 via Android
    14
    加毛分号
    NemoAlex
    NemoAlex
    Oct 24, 2016
    15
    @neoblackcap 以前这么做主要是为了避免压缩出错。而现在的主流压缩工具,都不需要加分号了。
    ijse
    ijse
    Oct 24, 2016
    16
    你要的标准: http://standardjs.com/ 是不加分号的。

    一般由 eslint 检查,同时还能避免或提前发现一些问题。

    其实,没什么标准规范,团队达成一致并遵守即可。
    zpf124
    zpf124
    Oct 24, 2016
    17
    @chaegumi
    1.分号 这个东西最好加上,因为
    一来,一部分的人的书写习惯,你不写他们看着不顺眼;
    二来, js 本身当初设计就很简单不严谨,所有 小程序啊 以及个别的上古浏览器对于这些解析会有各种奇怪的问题,所以现在开始出现 tc 啊 strict 模式这些东西。

    当然,如果上面这俩问题你不用考虑那就不用管他,加不加都可以,但记得一个项目里要统一,别前面不加,中间突然开始加分号,最后又没了。

    2 , 结束标记问题, 不需要加!
    这是当初的 XHTML 标准推广的玩意,要求标签必须有结束元标记必须带“/”,而且除了这个还要求 标签必须小写,属性必须有值且值必须被双引号包围。
    然而这个标准已经死了,你现在写按照 html5 的标准或者 html4.1 的就行了。
    zpf124
    zpf124
    Oct 24, 2016
    18
    @imshawer html4 和 html5 都不强制要求必须有结束标记,那个是 XHTML 的标准。
    broker
    broker
    Oct 24, 2016
    19
    可以参考下 Automatic Semicolon Insertion

    The source

    return
    a + b
    is transformed by automatic semicolon insertion into the following:

    return;
    a + b;

    The source

    a = b + c
    (d + e).print()

    is not transformed by automatic semicolon insertion, because the parenthesised expression that begins the second line can be interpreted as an argument list for a function call:

    a = b + c(d + e).print()
    neoblackcap
    neoblackcap
    Oct 24, 2016
    20
    @NemoAlex 请参考 @broker 的例子,那是 http://standardjs.com/ 里面提到的,那个根本就是有歧义,不加分号无法区别作者的真正意图
    whimsySun
    whimsySun
    Oct 24, 2016
    21
    如果都不加,下面的情况需要注意下
    ```
    expression...
    ;(function() {...})()

    ;[1,3,4].forEach((x) => {...})

    ```
    ityike
    ityike
    Oct 24, 2016
    22
    能不写就不写,主要原因是懒
    missingbobo
    missingbobo
    Oct 24, 2016
    23
    可以不加,但是建议加
    SuperMild
    SuperMild
    Oct 24, 2016 via iPad
    24
    加或不加,各成一派,根据个人喜好选择即可。
    cai314494687
    cai314494687
    Oct 24, 2016
    25
    可以不写分号,前提是你知道是有不写分号导致的坑。你可以看 这本书 https://book.douban.com/subject/25786138/ 第六条。
    txlty
    txlty
    Oct 24, 2016
    26
    如果不写分号,代码压缩 /混淆等操作以后,很大几率会报错。
    paranoiagu
    paranoiagu
    Oct 24, 2016 via Android❤️1
    27
    老程序员看完
    https://github.com/feross/standard/blob/master/RULES.md#semicolons

    这个,表示想辞职。
    chaegumi
    chaegumi
    OP
    Oct 24, 2016
    28
    @paranoiagu

    我也是老程序员了,现在很热衷找标准做法,然后按标准做法做。
    murmur
    murmur
    Oct 24, 2016
    29
    加分号是一种习惯 不加分号才麻烦
    另外标准是人订的 大家只要都按一个写就行了
    an168bang521
    an168bang521
    Oct 24, 2016
    30
    我是不写不舒服斯基!
    好吧,我稍微有点强迫症,除了大括号外,我都加;
    否者看着不舒服,会感觉这段代码没有写完; if-else 语句,也会大括号;
    DiamondbacK
    DiamondbacK
    Oct 24, 2016❤️1
    31
    尤雨溪解释了不用分号的理由 http://slides.com/evanyou/semicolons#/
    Cbdy
    Cbdy
    Oct 24, 2016
    32
    现在看来我觉得这个和“ C 语言要不要另起一行大括号”一样,为了代码风格统一考虑统一就好了。
    xylitolLin
    xylitolLin
    Oct 24, 2016
    33
    我不加
    Magician
    Magician
    Oct 24, 2016 via iPhone
    34
    加上感觉好看点
    chiv2
    chiv2
    Oct 24, 2016
    35
    没有所谓的标准,只有习惯的区别。我以前加,现在习惯不加。
    aaa0009
    aaa0009
    Oct 24, 2016
    36
    反正最好都要压缩的,无所谓加/不加。
    zongren
    zongren
    Oct 24, 2016
    37
    习惯不加,不加更简洁,没啥
    Arnie97
    Arnie97
    Oct 24, 2016 via Android❤️1
    38
    由于我学 JavaScript 前学过 VB 、 Pascal 、 Python 、 Ruby 等不写分号的语言和 C 、 C++、 Java 等写分号的语言,所以留下了带大括号(类 C 语法)的语言就要写分号的刻板印象,不写总感觉十分别扭。不知道大家有没有同感。
    jydeng
    jydeng
    Oct 24, 2016
    39
    习惯写,我同时写 C#.
    tchekai704
    tchekai704
    Oct 24, 2016 via iPhone
    40
    我就不说我写 python 还手动加分号, java 程序员 23333
    codelegant
    codelegant
    Oct 24, 2016 via Android
    41
    拿不准就全部加上,降低风险。
    ByZHkc3
    ByZHkc3
    Oct 25, 2016
    42
    不写分号能忍?
    kindjeff
    kindjeff
    Oct 25, 2016 via iPhone
    43
    遇到(function(){})()这种东西在下一行的时候,上一行不加还识别不出来😃会报错
    aoaione
    aoaione
    Oct 25, 2016
    44
    强迫症能忍?
    AdamChrist
    AdamChrist
    Oct 25, 2016
    45
    从 java 转过来..一直都加..而且看到 webstorm 的警告..我也很难受..一定要加上才行..
    griffinqiu
    griffinqiu
    Oct 25, 2016 via iPhone
    46
    总结:不加,只在(和[打行首的时候加前置分号, 即;(和;[
    Hyperion
    Hyperion
    Oct 25, 2016 via Android
    47
    重点不是插还不是插,插是因为防止程序二义性,自动插分号插错地方。不插是因为想通了为什么要插。

    无论插不插都是语言风格,你明白为什么意义更大,没有谁比较智障谁比较高级的说法。个人是写的。

    盲目的传教很讨人厌。
    SourceMan
    SourceMan
    Oct 25, 2016 via iPhone
    48
    不加,构建工具帮忙加
    winglight2016
    winglight2016
    Oct 25, 2016
    49
    写 java 转过来,已经习惯加上分号了。。。
    ly710
    ly710
    Oct 25, 2016
    50
    至少写 es6 的语法,不加分号之后代码要好看很多。
    Quaintjade
    Quaintjade
    Oct 25, 2016 via Android
    51
    @ijse
    为啥用单引号啊?感觉既然 json 字符串用双引号, js 里也用双引号比较统一。
    好像 js 单引号双引号没有转义上的区别来着?
    Hyperion
    Hyperion
    Oct 25, 2016 via Android
    52
    @Quaintjade 因为 es6 有了...
    xcodebuild
    xcodebuild
    Oct 25, 2016
    53
    没有标准,这在 eslint 中是个可配置选项,团队保持一致即可
    unknownservice
    unknownservice
    Oct 25, 2016
    54
    不是必须要加,但是不加有时候会有问题,所以还是加上为好。
    ZxBing0066
    ZxBing0066
    Oct 25, 2016
    55
    https://google.github.io/styleguide/javascriptguide.xml?showone=Semicolons#Semicolons

    个人建议是添加 这样可以减少出现莫名其妙的问题的概率,毕竟一直加和选择加来说,一直加用脑少,出错概率小。。。 当然了这玩意见仁见智
    Phariel
    Phariel
    Oct 25, 2016 via Android
    56
    强迫症,尤其是看着 IDE 里的缺少分号提示更是不能忍,通通加上
    yolio2003
    yolio2003
    Oct 25, 2016
    57
    不要
    codeyung
    codeyung
    Oct 25, 2016
    58
    一般不加
    fds
    fds
    Oct 25, 2016
    59
    @Phariel 有些 IDE 把 lint 设置改一下,就会变成提示多余分号了 ;p
    onlyhot
    onlyhot
    Oct 25, 2016 via iPhone
    60
    加
    nino
    nino
    Oct 25, 2016
    61
    python 也可以写分号,但从来没看人写过
    Tyanboot
    Tyanboot
    Oct 25, 2016 via Android
    62
    必须加,不加不好看。我同时还写 Python , c#, c++。
    root787
    root787
    Oct 25, 2016
    63
    这种问题需要问?
    zwhu
    zwhu
    Oct 25, 2016
    64
    vue 的作者是坚定的不加分号党,还是看社区提倡哪种了
    nigelvon
    nigelvon
    Oct 25, 2016
    65
    按项目来看加与不加,统一就好。个人喜欢加分号。非常讨厌前面加分号的。
    chnhyg
    chnhyg
    Oct 25, 2016
    66
    我的建议是加,原因有二。
    1 、如果不加分号,代码会有未知的隐患,即使有很完善的方案去避免隐患的发生,但是学习它也是需要成本的。
    2 、在团队开发中,肯定要去规范,加或是不加。不加的过渡到加,基本没有学习成本;加的过渡到不加,还要去学习,会对新人快速融入到团队产生一定的影响。
    xwartz
    xwartz
    Oct 25, 2016
    67
    不加
    bigggge
    bigggge
    Oct 25, 2016
    68
    webstorm 有警告,不加难受
    zongwan
    zongwan
    Oct 25, 2016
    69
    不清楚 vue

    写 React 时 SublimeText 会提示我哪里应该加分号,哪里不用加。尤其碰到自动换行
    感觉更了解到代码结构了
    也避免了某些 bug
    Quaintjade
    Quaintjade
    Oct 25, 2016 via Android
    70
    @Hyperion
    是说 ES6 引入的模板字符串吗?那个是 `` ,不是单 /双引号
    g0thic
    g0thic
    Oct 25, 2016
    71
    不加
    Quaintjade
    Quaintjade
    Oct 25, 2016 via Android
    72
    话说未压缩的 jQuery 还是用分号的。
    1340641314
    1340641314
    Oct 25, 2016
    73
    以前有加分号,现在都不加分号了,没什么原因,主要还是因为懒
    miniwade514
    miniwade514
    Oct 25, 2016
    74
    谁需要分号才能看清楚语句的开始和结束?
    Inside
    Inside
    Oct 25, 2016
    75
    有这么难决定吗?凡是表达式语句就加以免表达式结果跟你的预期不一样,是完整的代码块就不加。
    dyingbleed
    dyingbleed
    Oct 25, 2016
    76
    这是一个会引发圣战的问题……
    magicdawn
    magicdawn
    Oct 25, 2016
    77
    mingyun
    mingyun
    Oct 25, 2016
    78
    习惯加
    magicdawn
    magicdawn
    Nov 8, 2016
    80
    分号党看了尤雨溪的 slide 之后就转非分号党了...
    http://slides.com/evanyou/semicolons#/18
    luwuer
    luwuer
    Sep 4, 2017
    81
    ES6 不建议加,所以我不加了...
    Axurez
    Axurez
    Mar 6, 2018
    82
    @NemoAlex 至少 React 和 Angular 是加的,TypeScript 也是加的。那个所谓的 Standard 只是这家公司叫 stdlib。
    Axurez
    Axurez
    Mar 6, 2018
    83
    v8 和 node 也都是加的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1513 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 211ms · UTC 17:52 · PVG 01:52 · LAX 09:52 · JFK 12:52
    ♥ Do have faith in what you're doing.