V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
289396212
V2EX  ›  JavaScript

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

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

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

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

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

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

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

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

    ---

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

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


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

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

    比如用 prettier 格式化:

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

    ;(condition ? fn1 : fn2)(args)

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

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

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

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

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

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

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

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


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

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

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

    JS 如果還喜歡歧義的語句,小心下場像 Perl 一般.
    sunmoon1983
        79
    sunmoon1983  
       52 天前
    必须要加,不加不舒服
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2794 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 14:35 · PVG 22:35 · LAX 07:35 · JFK 10:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.