大家写 JS/TS 的时候会在表达式后面加;吗?语法上加不加都行,大家团队有要求吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Mteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
289396212
V2EX    Javascript

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

  •  
  •   289396212 2024-09-09 13:23:21 +08:00 8668 次点击
    这是一个创建于 397 天前的主题,其中的信息可能已经有所发展或是发生改变。
    80 条回复    2024-11-29 12:12:12 +08:00
    nomagick
        1
    nomagick  
       2024-09-09 13:25:23 +08:00   14
    不加分号心神不宁。
    加分号不是给编译器加的,是给程序员的脑子加的,了结心智负担,清空快速缓存准备加载下一行。
    reoah2
        2
    reoah2  
       2024-09-09 13:28:24 +08:00
    加了会自动对齐,及其舒服
    reoah2
        3
    reoah2  
       2024-09-09 13:28:54 +08:00
    @reoah2 及其->极其
    blucas01
        4
    blucas01  
       2024-09-09 13:34:07 +08:00   1
    最好加,不然出问题可能会懵逼,不信你看:

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

    (user.go)()
    ```
    yikyo
        5
    yikyo  
       2024-09-09 13:34:48 +08:00   1
    正常项目都必须统一团队风格,喜欢哪个都可以,用 git 钩子推送时自动格式化吧。

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

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

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

    总结起来就是以 [ 和 ( 开头这两种情况需要注意。
    mandex
        22
    mandex  
       2024-09-09 15:10:07 +08:00
    当然要加啊
    jisuowei
        23
    jisuowei  
       2024-09-09 15:17:02 +08:00
    现代代码都不加

    ---

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

    ```
    ;(user.go)()
    ```
    lyxxxh2
        24
    lyxxxh2  
       2024-09-09 15:24:03 +08:00   1
    不加,多一个字符脑子都要处理。
    dd0754
        25
    dd0754  
       2024-09-09 15:33:36 +08:00
    zxx0102
        26
    zxx0102  
       2024-09-09 15:34:21 +08:00
    先说结论:“建议”加!说不加的,看看这道题,去运行一下就明白了。
    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
        27
    zhhbstudio  
       2024-09-09 15:43:11 +08:00
    @blucas01 #4 一时竟然没反应过来,平时确实用的少,又加深了印象,感谢!
    imsuxp
        28
    imsuxp  
       2024-09-09 15:44:37 +08:00   1
    @blucas01 #4 以前 v2er 总结过了:如果你写 JS 代码不喜欢带分号,而又搞不清什么时候必须加分号,可以这么做:
    在以 "("、"[" 、"/"、"+"、"-" 开头的语句前面都加上一个分号。
    wzdsfl
        29
    wzdsfl  
       2024-09-09 15:48:30 +08:00
    不加分号的踢出团队,不允许这种害群之马污染我的代码
    imsuxp
        30
    imsuxp  
       2024-09-09 15:50:47 +08:00
    @zxx0102 #26 在以 "("、"[" 、"/"、"+"、"-" 开头的语句前面都加上一个分号。
    bgm004
        31
    bgm004  
       2024-09-09 15:54:19 +08:00
    不加,如果要求加就格式化的时候自动添加。但是决定不会手动加。
    wjx0912
        32
    wjx0912  
       2024-09-09 15:55:01 +08:00
    不加。分号看着难受。偶尔判断歧义或者欺骗编译器的才加
    AV1
        33
    AV1  
       2024-09-09 16:01:20 +08:00
    @suxiaoxiann 其实真正需要关心的只有 ( 和 [ 需要在前面加分号,因为其他在几个正常开发中很少会作为一个表达式的起始。


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

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

    比如用 prettier 格式化:

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

    ;(condition ? fn1 : fn2)(args)

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

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

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

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

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

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

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

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


    个人的出发点是如果一个语言任何场景都不加都没问题那就不加,JS 很明显是不行的
    shyangs
        78
    shyangs  
       2024-09-11 10:45:38 +08:00
    Javascript 的 ASI 是失,了歧,社陷入分耗. (有些似意的男女立)

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

    在言流行是越越格,例如 TypeScript (型),Rust (格的器).

    JS 如果喜歧的句,小心下像 Perl 一般.
    sunmoon1983
        79
    sunmoon1983  
       2024-09-11 21:43:14 +08:00
    必须要加,不加不舒服
    forty
        80
    forty  
       316 天前
    配置好 prettier, 项目里放上 .prettierrc
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5521 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 43ms UTC 08:48 PVG 16:48 LAX 01:48 JFK 04:48
    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