推荐关注
› Meteor
› JSLint - a JavaScript code quality tool
› jsFiddle
› D3.js
› WebStorm
推荐书目
› JavaScript 权威指南第 5 版
› Closure: The Definitive Guide
289396212

大家写 JS/TS 的时候会在表达式后面加;吗?语法上加不加都行,大家团队有要求吗?

  •  
  •   289396212 · Sep 9, 2024 · 11054 views
    This topic created in 786 days ago, the information mentioned may be changed or developed.
    80 replies  •  2024-11-29 12:12:12 +08:00
    nomagick
    nomagick
    Sep 9, 2024❤️14
    1
    不加分号心神不宁。
    加分号不是给编译器加的,是给程序员的脑子加的,了结心智负担,清空快速缓存准备加载下一行。
    reoah2
    reoah2
    Sep 9, 2024
    2
    加了会自动对齐,及其舒服
    reoah2
    reoah2
    Sep 9, 2024
    3
    @reoah2 及其->极其
    blucas01
    blucas01
    Sep 9, 2024❤️1
    4
    最好加,不然出问题可能会懵逼,不信你看:

    ```js
    let user = {
    go() {
    console.log('GO')
    }
    }

    (user.go)()
    ```
    yikyo
    yikyo
    Sep 9, 2024❤️1
    5
    正常项目都必须统一团队风格,喜欢哪个都可以,用 git 钩子推送时自动格式化吧。

    个人喜欢加分号,但是越来越多的项目好像都不加了。
    codehz
    codehz
    Sep 9, 2024
    6
    不是都用自动格式化器的吗(
    prettier 不加分号的模式也会在上面那种冲突的情况给你在开头加分号的(
    BeautifulSoap
    BeautifulSoap
    Sep 9, 2024
    7
    加。eslint 警告,然后代码 push 到 github 后,自动调用 github actions 加,以防有的人就是会漏掉。ps:代码格式化极其不推荐 prettier 这破玩意,难用得一塌糊涂还是建议用 eslint 做代码格式化
    nomagick
    nomagick
    Sep 9, 2024
    8
    没错,prettier 懂个茄子,多打两个空行都不行,说起来就是劳资最懂,空行就是不能多,简直为祸一方
    tomSoSleepy
    tomSoSleepy
    Sep 9, 2024
    9
    个人习惯不加 小公司咋搞都行,但是协作的时候一般还是加会好点
    shintendo
    shintendo
    Sep 9, 2024
    10
    不加,视觉上总觉得脏脏的。
    上面说的括号开头的情况,实际开发碰到的频率很低,即使碰到也有 eslint
    SingeeKing
    SingeeKing
    Sep 9, 2024 via iPhone
    11
    这东西都是自动格式化的啊,我其实倾向于加,不然某些语法下换行可能出现各种不太注意的错误
    dagouziwangwang
    dagouziwangwang
    Sep 9, 2024❤️1
    12
    不 care ,反正都是 eslint 或 prettier 处理的
    si
    si
    Sep 9, 2024
    13
    我一般会加,偶尔懒得加。
    Laobai
    Laobai
    Sep 9, 2024
    14
    不加,加了看着难受
    leaveeel
    leaveeel
    Sep 9, 2024
    15
    有要求的都会配置 eslint ,保存的时候和规则不一样加了也给你删了,不加也自动给你加上。我写的时候不加,按习惯来最顺手,反正最后提交上去了都是规范的
    chenliangngng
    chenliangngng
    Sep 9, 2024
    16
    不加;自动补齐是 js 糟粕之一,建议加

    不过按道理你无需 care ,可以交给 vscode 自动格式化
    InDom
    InDom
    Sep 9, 2024
    17
    一般都加, 但不要求别人加,爱加不加.
    lisxour
    lisxour
    Sep 9, 2024
    18
    最好加,有的时候代码压缩的时候可能对某些写法或者语法不支持导致没自动加“;”,编译出来的代码是有问题的,而且 release 的变量名也是全改了的,当时定位问题,定到头皮发麻
    9pr7im4IjQ9u0806
    9pr7im4IjQ9u0806
    Sep 9, 2024
    19
    @nomagick #1 javaer 写前端深有同感,这个负担相当大
    alanhe421
    alanhe421
    Sep 9, 2024
    20
    team 的话,加
    AV1
    AV1
    Sep 9, 2024❤️1
    21
    @blucas01
    `(user.go)()`这种表达在实际开发中就几乎没出现过吧。

    实际开发中不加括号会出现问题一般都就两种情况,一个是 IIFE ,如
    (() => {})()
    另一个是 array 解构赋值,如
    [first, second, ...rest] = arr

    总结起来就是以 [ 和 ( 开头这两种情况需要注意。
    mandex
    mandex
    Sep 9, 2024
    22
    当然要加啊
    jisuowei
    jisuowei
    Sep 9, 2024
    23
    现代代码都不加

    ---

    如果是行首是括号,加在前面:

    ```
    ;(user.go)()
    ```
    lyxxxh2
    lyxxxh2
    Sep 9, 2024❤️1
    24
    不加,多一个字符脑子都要处理。
    0754
    0754
    Sep 9, 2024
    25
    加
    zxx0102
    zxx0102
    Sep 9, 2024
    26
    先说结论:“建议”加!说不加的,看看这道题,去运行一下就明白了。
    let a = 1, b = 2, c = 3, d =4
    if(true) {
    [a, b] = [b, a]
    [c, d] = [d, c]
    }

    js 的作用域很烦的,原因和结果看这个: https://blog.csdn.net/qq_41308489/article/details/122798951
    zhhbstudio
    zhhbstudio
    Sep 9, 2024
    27
    @blucas01 #4 一时竟然没反应过来,平时确实用的少,又加深了印象,感谢!
    imsuxp
    imsuxp
    Sep 9, 2024❤️1
    28
    @blucas01 #4 以前 v2er 总结过了:如果你写 JS 代码不喜欢带分号,而又搞不清什么时候必须加分号,可以这么做:
    • 在以 "("、"[" 、"/"、"+"、"-" 开头的语句前面都加上一个分号。
    wzdsfl
    wzdsfl
    Sep 9, 2024
    29
    不加分号的踢出团队,不允许这种害群之马污染我的代码
    imsuxp
    imsuxp
    Sep 9, 2024
    30
    @zxx0102 #26 在以 "("、"[" 、"/"、"+"、"-" 开头的语句前面都加上一个分号。
    bgm004
    bgm004
    Sep 9, 2024
    31
    不加,如果要求加就格式化的时候自动添加。但是决定不会手动加。
    datadump
    datadump
    PRO
    Sep 9, 2024
    32
    不加。分号看着难受。偶尔判断歧义或者欺骗编译器的才加
    AV1
    AV1
    Sep 9, 2024
    33
    @suxiaoxiann 其实真正需要关心的只有 ( 和 [ 需要在前面加分号,因为其他在几个正常开发中很少会作为一个表达式的起始。


    @zxx0102 其实哪怕你每个语句尾加都坚持分号,你也最好在 ( 和 [ 前面也要加分号。再原教旨的分号党,也会有忘记写分号的时候,加分号多一重保险。
    FishBear
    FishBear
    Sep 9, 2024
    34
    项目配置了保存自动加分号...不然有的地方有 有的地方没有 难受
    Sayuri
    Sayuri
    Sep 9, 2024
    35
    你问这个问题,说明你的项目框架没有配备良好的 lint 。
    公司缺乏对应的 JS 人才导致的。
    ttionya
    ttionya
    Sep 9, 2024
    36
    加不加都是靠 lint 工具处理的,但是个人项目不加,公司项目按公司规范来,公共项目别人加我就加。

    不过实际使用下来,感觉还是加分号会更好点。

    比如用 prettier 格式化:

    ```ts
    // 格式化前
    if (condition) return

    ;(condition ? fn1 : fn2)(args)

    // 格式化后
    if (condition) return
    ;(condition ? fn1 : fn2)(args)
    ```

    中间空行被删除了,实在是难受。加了分号肯定就不会有这个问题了
    zhangky
    zhangky
    Sep 9, 2024
    37
    前端不加,后端加
    digimoon
    digimoon
    Sep 9, 2024
    38
    不加,要加让格式化工具加
    cuzfinal
    cuzfinal
    Sep 9, 2024
    39
    我习惯不加,对于那种不加; 就会产生未知运行时错误的代码,ts 会有提示,避免写这种代码就好了。
    nagisaushio
    nagisaushio
    Sep 9, 2024 via Android
    40
    不加,让 prettier 决定
    enjoyCoding
    enjoyCoding
    Sep 9, 2024
    41
    看 lint, 有的项目 lint 是必加 有的项目是必不加, 但我最讨厌的是可加可不加
    xR13zp0h67njQr2S
    xR13zp0h67njQr2S
    Sep 9, 2024
    42
    不加,eslint 和 prettier 都设置的不要
    Nitsuya
    Nitsuya
    Sep 9, 2024
    43
    java 写多了, 现在写 kotlin 随手加了又马上删掉.......
    libook
    libook
    Sep 9, 2024
    44
    不加的前提是有 StandardJS 这种 linter 保障不出问题,没有 linter 老老实实加分号。

    我反正都会加。
    mxT52CRuqR6o5
    mxT52CRuqR6o5
    Sep 9, 2024 via Android
    45
    不怎么关心加不加,基本靠 lint 工具决定
    mark2025
    mark2025
    Sep 9, 2024
    46
    @nomagick prettier 什么破烂玩意儿,if/else 都要限制你用它制定的规则
    https://github.com/prettier/prettier/issues/3084
    https://github.com/prettier/prettier/issues/840
    mark2025
    mark2025
    Sep 9, 2024
    47
    @suxiaoxiann 结合 eslint 的相关规则,其实不加也没问题了。vscode 之类 ide 会自动检测判断的
    mark2025
    mark2025
    Sep 9, 2024
    48
    @ttionya 可以设置 eslint 规则,禁止单行多命令,必须用大括号来包裹,
    比如 禁止 `if (condition) return`, 必须 `if (condition) { return }` 或者
    ```
    if (condition) {
    return
    }
    ```

    我以前是分号党,tab 党,逐渐变成无分号,4 空格,现在是无分号,2 空格了。 写 TS 的缩进得小点不然行宽容易超限,尤其是写前端。
    mark2025
    mark2025
    Sep 9, 2024
    49
    @zxx0102 项目团队本来是应该禁止这种写法的,看似炫技巧实则埋坑。
    ktqFDx9m2Bvfq3y4
    ktqFDx9m2Bvfq3y4
    Sep 9, 2024
    50
    写 Angular ,一步到位:加。
    ktqFDx9m2Bvfq3y4
    ktqFDx9m2Bvfq3y4
    Sep 9, 2024
    51
    @Chad0000 #50
    看走眼了,以为是类型声明。分号也是加的。
    eephee
    eephee
    Sep 9, 2024
    52
    不加 `;` 因为麻烦而且看着乱不好看,配合 lint 工具解决可能出现的二义性问题

    加 `?` 因为要利用类型严格模式提升代码的健壮性
    eephee
    eephee
    Sep 9, 2024
    53
    @eephee 抱歉看错了,原来是问号的意思,不小心看成了 optional 符号
    blucas01
    blucas01
    Sep 9, 2024❤️1
    54
    @suxiaoxiann 记这条规则,不如养成加分号的习惯方便
    darkengine
    darkengine
    Sep 9, 2024
    55
    写的时候不加,最后 prettier format 一遍,真遇到过几次没加分号 npm start 报错的。
    imsuxp
    imsuxp
    Sep 10, 2024
    56
    @blucas01 #54 现在前端基本默认都不加了,比如 Vue
    molvqingtai
    molvqingtai
    Sep 10, 2024
    57
    加不加看团队规范,我们团队不加,至于 IIFE 问题,都有 lint 限制
    zed1018
    zed1018
    Sep 10, 2024
    58
    不加,并且 prettier 里配置了移除分号
    qa2080639
    qa2080639
    Sep 10, 2024
    59
    加 写 PHP 习惯了
    daolanfler
    daolanfler
    Sep 10, 2024❤️1
    60
    加分号,加逗号,都是 prettier 一键格式化的事儿
    hereIsChen
    hereIsChen
    Sep 10, 2024
    61
    个人习惯不加
    andy7076
    andy7076
    Sep 10, 2024
    62
    纠结这干啥
    Wxh16144
    Wxh16144
    Sep 10, 2024
    63
    今天纠结 `;`(表达式末位分号)
    明天纠结 2-tab ,4tab (缩进),还是 2-space 4-space (空格)
    后天考虑 单句 if 加不加 `{}` (花括号)

    我这小公司看个人喜好写,leader 配了格式化,提交的时候就按照他的喜好来就好了

    如果你是 leader , 那就按照自己喜好来配置

    但是从我个人角度来说,代码是给人阅读的。 加于不加我都有。 代码很乱的时候就加分号。
    xntzmk
    xntzmk
    Sep 10, 2024
    64
    加了分号感觉很麻烦,而且丑。但主要还是得看团队的 prettier
    akcode
    akcode
    Sep 10, 2024
    65
    加,同意语言风格;各种语言写得多的时候,一会加,一会又不加,会精神错乱。
    akcode
    akcode
    Sep 10, 2024
    66
    @akcode 同意 -> 统一
    doommm
    doommm
    Sep 10, 2024
    67
    @BeautifulSoap ESlint 准备要废弃格式化相关的规则了 https://eslint.org/blog/2023/10/deprecating-formatting-rules/
    jqtmviyu
    jqtmviyu
    Sep 10, 2024
    68
    爱护小拇指, 从不加分号开始.
    user1284
    user1284
    Sep 10, 2024
    69
    biome 配置项配置可以设置必要的地方加不就行了吗, es 和 pre 都不喜欢, 还有那个 oxc, 估计又是哪个的 kpi 项目, 连这种基本功能都不做, 要让 esl 来做
    BeautifulSoap
    BeautifulSoap
    Sep 10, 2024
    70
    @doommm 文章最好看完,这些规则现在摘出来成为独立项目由社区维护了。eslint-stylistic 。专门用来做格式化的工作。 说真的 eslint 的格式化比 prettier 这破玩意好用一万倍
    NasirQ
    NasirQ
    Sep 10, 2024
    71
    加,但不一定是手动。
    一般设置编辑器会自动保存时格式化添加。
    另,写久了,很多时候就跟打字一样会下意识的加上标点。不存在心智负担。
    反而有种整齐的美感。
    xiangyuecn
    xiangyuecn
    Sep 10, 2024
    72
    /* eslint-disable */ 嘿嘿,8 小时工作量被我 1 小时干完了,摸鱼摸鱼
    shellus
    shellus
    Sep 10, 2024
    73
    假的做不做都可以: 找出根本区别再进行选择
    真的完全做不做都一样:绝对不做!
    palxie
    palxie
    Sep 10, 2024
    74
    我们团队不加, 个人也觉得没必要
    aolyu
    aolyu
    Sep 10, 2024
    75
    不加
    mark2025
    mark2025
    Sep 10, 2024
    76
    @BeautifulSoap eslint 是给你一个框架和可配置的规则,而 prettier 是给你一个 prettier 制定的规则。显然前者更加符合实际需求(不同人有不同的风格习惯,不同项目有不同的历史包袱)
    chf007
    chf007
    Sep 10, 2024❤️1
    77
    加

    个人的出发点是如果一个语言任何场景都不加都没问题那就不加,JS 很明显是不行的
    shyangs
    shyangs
    Sep 11, 2024
    78
    JavaScript 的 ASI 是設計失誤,帶來了歧義,還讓社區陷入分ˋ號黨爭內耗. (有些類似無意義的男女對立)

    應該多學學 Python 哲學: There should be one – and preferably only one – obvious way to do it.

    現在語言流行趨勢是越來越嚴格,例如 TypeScript (靜態型別),Rust (嚴格的編譯器).

    JS 如果還喜歡歧義的語句,小心下場像 Perl 一般.
    sunmoon1983
    sunmoon1983
    Sep 11, 2024
    79
    必须要加,不加不舒服
    forty
    forty
    Nov 29, 2024
    80
    配置好 prettier, 项目里放上 .prettierrc
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1618 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 226ms · UTC 17:54 · PVG 01:54 · LAX 09:54 · JFK 12:54
    ♥ Do have faith in what you're doing.