V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
npm
V2EX  ›  Vue.js

想问一下大家在写 vue 代码时,习惯句末加上 ; 吗?

  •  
  •   npm · 2020-02-19 20:41:11 +08:00 · 8136 次点击
    这是一个创建于 1768 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我看 vue 官方都没有在句末加上 ;

    但是我写 egg.js 时,egg 官方又推荐加上 ;

    而且我之前写 PHP 时,也习惯加上 ;

    现在感觉好纠结,到底该不该在句末加上 ;
    64 条回复    2020-03-12 21:32:47 +08:00
    maichael
        1
    maichael  
       2020-02-19 20:46:40 +08:00
    自己写代码的话随意。
    团队的话以代码规范为准。
    QQAdele2
        2
    QQAdele2  
       2020-02-19 20:48:18 +08:00
    袋鼠数据库管理工具( DBKangaroo )每周都要发布一个版本,所以
    https://dbkangaroo.github.io/
    lxk11153
        3
    lxk11153  
       2020-02-19 20:50:07 +08:00   ❤️ 1
    依老夫看 3030 年应该还有类似问题: 加不加分号,Tab 还是 Space
    QQAdele2
        4
    QQAdele2  
       2020-02-19 20:51:58 +08:00
    同意楼主,实测确实快了。

    袋鼠数据库管理工具( DBKangaroo )每周都要发布一个版本,前面几周上传安装包要一个上午,还经常断线;
    最近一周上传只要半个小时左右即可搞定。

    也欢迎大家关注 袋鼠数据库管理工具( DBKangaroo )的成长。。。
    varzy
        5
    varzy  
       2020-02-19 20:58:38 +08:00 via iPhone
    写项目第一件事就是配置格式化工具,未来想换风格只需要改个配置重新跑一下格式化命令就好
    Mistwave
        6
    Mistwave  
       2020-02-19 21:01:52 +08:00 via iPhone   ❤️ 2
    ddsfeng
        7
    ddsfeng  
       2020-02-19 21:04:04 +08:00   ❤️ 2
    @Livid 有人发广告 @QQAdele2

    v2ex.com/member/QQAdele2/replies


    看他的回复记录,基本上 回复别人的内容之后, 都自动带一句.
    llb123
        8
    llb123  
       2020-02-19 21:04:50 +08:00
    。。。这不是 1 看公司规范 2 看自己习惯么,反正 js 编译的时候也会给你加上分号的
    KuroNekoFan
        9
    KuroNekoFan  
       2020-02-19 21:06:01 +08:00
    格式化工具能解决的问题就不要讨论了
    heyjei
        10
    heyjei  
       2020-02-19 21:07:36 +08:00
    看项目带的 ESLint,如果没有看心情
    learnshare
        11
    learnshare  
       2020-02-19 21:08:28 +08:00
    选一个合适的代码风格就行了
    https://github.com/airbnb/javascript
    liuy1994g
        12
    liuy1994g  
       2020-02-19 21:35:11 +08:00 via Android
    js 不需要加分号啊
    chenliangngng
        13
    chenliangngng  
       2020-02-19 21:43:08 +08:00
    不加。鉴于 js 不加分号乃糟粕之一,设置 IDE 保存时自动格式化帮加
    MrUser
        14
    MrUser  
       2020-02-19 21:50:56 +08:00
    同意 9# 的,
    配置好格式化工具,加与不加一个快捷键就统一了。
    galikeoy
        15
    galikeoy  
       2020-02-19 22:11:07 +08:00
    放心,不管你加不加,Babel 会帮你加的
    unicloud
        16
    unicloud  
       2020-02-19 22:15:36 +08:00 via iPhone
    我习惯在结尾加上;
    这是在 jQuery 时代养成的习惯;
    mongodb
        17
    mongodb  
       2020-02-19 22:18:26 +08:00   ❤️ 1
    Python 不加。
    所以我在 JS 里也不加。
    charlieputon
        18
    charlieputon  
       2020-02-19 22:54:27 +08:00 via Android
    一般编辑器不是会提示;是多余的吗,如果在语法上的确是多余的。记得 idea 和 as 都是这样。
    ericls
        19
    ericls  
       2020-02-19 23:24:59 +08:00 via iPhone
    不要浪费时间搞这些
    都是可以自动加或者去掉的东西 0 成本改变决定的东西
    ujued
        20
    ujued  
       2020-02-19 23:34:51 +08:00 via iPhone
    站在极客的角度呢,不加会好些,看上去干净
    Blackricky
        21
    Blackricky  
       2020-02-20 00:42:41 +08:00   ❤️ 1
    在 《你不知道的 JavaScript (中卷)》里专门有一个小节( 5.3 节)叫 [自动分号] 作者有认为需要加上分号。

    JavaScript 有时候会为代码自动加上分号, 自动分号插入( Automatic Semicolon Insertion,ASI )这是一种 “纠错”的机制,作者认为我们应该将这种机制的依赖降到最低。

    有兴趣可以去看看原书。



    我觉得说的很有道理,所以我加上了。
    beastk
        22
    beastk  
       2020-02-20 00:57:07 +08:00 via iPhone
    话说压缩的时候,不加分号会导致无法闭合吗?
    molvqingtai
        23
    molvqingtai  
       2020-02-20 01:14:13 +08:00 via Android
    不加
    S4msara
        24
    S4msara  
       2020-02-20 02:05:04 +08:00 via Android
    习惯是有这么个习惯,所以 eslint 总是让我很难受,于是有在刻意提醒自己不加了
    mrcotter2013
        25
    mrcotter2013  
       2020-02-20 05:34:49 +08:00 via iPhone
    不喜欢加,ESLint 和 Prettier 配置好自动去除多余的符号,空格,缩进一类的
    shanlanlan
        26
    shanlanlan  
       2020-02-20 07:58:18 +08:00   ❤️ 1
    @Livid 2/4 楼强行广告。
    alexsunxl
        27
    alexsunxl  
       2020-02-20 08:28:09 +08:00
    不加
    反正编译器会加上
    inhal
        28
    inhal  
       2020-02-20 08:58:10 +08:00 via Android
    @beastk Quinlan?
    Track13
        29
    Track13  
       2020-02-20 09:46:10 +08:00 via Android
    vue 不加分号,其他习惯加。
    sunmoon1983
        30
    sunmoon1983  
       2020-02-20 10:23:25 +08:00
    强迫症必须加
    Livid
        31
    Livid  
    MOD
       2020-02-20 10:25:36 +08:00 via iPhone
    @Mistwave
    @ddsfeng
    @shanlanlan

    谢谢。那个账号已经被彻底 ban。
    yiqiao
        32
    yiqiao  
       2020-02-20 10:31:29 +08:00
    PHP 不是必须加「 ; 」的吗。。。
    不加你能运行?
    前端这个应该有规范吧。按规范来就好了啦
    magiclz233
        33
    magiclz233  
       2020-02-20 10:32:17 +08:00
    我自己觉得加上好点,因为这样在看代码的时候更清晰一点,但是我们团队是不加,我就好多都是自己加上,写完了一格式化没了。但是在写 Java 的时候,又得加上,搞的有点乱
    drydiy
        34
    drydiy  
       2020-02-20 10:40:23 +08:00
    我曾经也为这个烦恼。我尝试不加一段时间后,发现代码看起来简洁了一点,就不加了。
    其实需要手动加;的情况有这么几种:
    1、当你使用 return 返回内容时,注意代码块需要跟 return 在同一行。( break、throw、continue 等同理)
    2、注意 ()、[] 作为行头会跟上一行串联。
    ben1024
        35
    ben1024  
       2020-02-20 11:17:28 +08:00
    看缘分加,顺手就加
    php 必须要加的
    jydeng
        36
    jydeng  
       2020-02-20 11:19:42 +08:00
    团队统一就好。我们统一加,因为都有 java、c#背景,习惯了。
    no1xsyzy
        37
    no1xsyzy  
       2020-02-20 11:22:58 +08:00
    @drydiy 1、不能算需要手动加,而是说自动加会多加
    2、的话建议加在开头(防御性编程)
    no1xsyzy
        38
    no1xsyzy  
       2020-02-20 11:29:40 +08:00
    没什么好说的,我觉得这种可以自动化等价互转的问题甚至不能叫做代码规范。规范让人遵守以保证某种要求的,但这种问题你根本没必要去刻意遵守,只需要无脑让工具完成。
    至于用哪个,看哪个顺眼就行,如果看的量还没多到足以看任何一个顺眼,那就抛硬币决定 —— 直到你真觉得不顺眼了,那你显然知道该怎样了。
    DOLLOR
        39
    DOLLOR  
       2020-02-20 11:44:12 +08:00
    不加分号的,能不能告诉我,如何避免这种问题?
    var a = b
    (function(){})()

    func()
    ['ul', 'ol'].map(func)
    ochatokori
        40
    ochatokori  
       2020-02-20 12:03:24 +08:00 via Android
    @DOLLOR #39 37 楼回答了你的问题,遇到([的行开头加个分号就是了,人又不是死的,说不加就全部不加
    Tink
        41
    Tink  
       2020-02-20 12:04:28 +08:00
    @QQAdele2 #4 你在说啥?
    lijsh
        42
    lijsh  
       2020-02-20 12:09:28 +08:00
    看团队规范,反正 eslint 可以帮你 fix
    lxk11153
        43
    lxk11153  
       2020-02-20 12:10:21 +08:00
    所以我选择加,See: "应该将这种机制的依赖降到最低"
    FaiChou
        44
    FaiChou  
       2020-02-20 13:04:13 +08:00
    看过 react conf 里有一期, 一大佬在上面用 vim 讲解 react hooks, 他说过: 别问我为什么用 let 而不是 const, 年纪大了, 能少敲几下就少敲几个. (大概这么个意思)
    Curtion
        45
    Curtion  
       2020-02-20 13:24:31 +08:00
    都是 eslint 来规范的,反正又不需要自己操作,如果是自己的项目就按照自己的想法来设置 eslint 嘛
    realkaiway
        46
    realkaiway  
       2020-02-20 13:33:58 +08:00 via iPhone
    我个人写 react 配合 eslint 句末加;已经是一种习惯,但奇怪的是 vue-cli 的脚手架不搞这套,所以你要用脚手架的话那索性就不加
    creanme
        47
    creanme  
       2020-02-20 13:36:00 +08:00
    @DOLLOR 这种得手动加
    wangyzj
        48
    wangyzj  
       2020-02-20 14:09:31 +08:00
    eslint 我记得是没有的
    rain0002009
        49
    rain0002009  
       2020-02-20 14:23:05 +08:00
    vue 这种因为一般都是经过 babel 处理一下 不加分号 代码更清晰
    egg 一般不会用 babel 的吧 加上分号更严谨
    Hanggi
        50
    Hanggi  
       2020-02-20 14:40:02 +08:00
    别争了,加肯定是要加的,这是 js 标准。但是不需要手动加,用工具,自动添加。
    FaceBug
        51
    FaceBug  
       2020-02-20 14:42:24 +08:00
    webstorm 不加好像会有一个提示颜色吧,然后一般就加上了。
    66beta
        52
    66beta  
       2020-02-20 14:45:03 +08:00
    建议采用 airbnb 的 js 规范
    Mutoo
        53
    Mutoo  
       2020-02-20 14:51:52 +08:00
    js 标准是建议加,但是 vue 的创史人 youyuxi 不喜欢加,所以他们不建议加。

    不加的话会有歧义,例如

    return
    { status: "OK" }

    即使用 prettier 或 eslint 也不能正确地自动加上分号,会出现两种结果:

    return { status: "OK" };



    return;
    { status: "OK" };
    Revenant
        54
    Revenant  
       2020-02-20 15:34:29 +08:00
    然而,对使用分号的人而言,ASI 机制有时会很棘手。例如:

    return
    {
    name: "ESLint"
    };

    这个看起来像是个 return 语句返回一个对象文本。然而,JavaScript 引擎将代码解释成:
    return;
    {
    name: "ESLint";
    }

    事实上,一个分号插入到 return 语句之后,导致(块中的标签文本)下面的代码不可达。
    puilu
        55
    puilu  
       2020-02-20 15:38:43 +08:00
    配上 eslint,启用保存修复,爱+不+,前端规范乱得跟什么一样。
    Martox
        56
    Martox  
       2020-02-20 16:21:24 +08:00
    不加分号,老 vue 了
    amundsen
        57
    amundsen  
       2020-02-20 17:10:13 +08:00
    一楼说得对
    amundsen
        58
    amundsen  
       2020-02-20 17:11:17 +08:00
    我自己写已经没有加分号的习惯了,但是注意一些语法插件(lint)执行时可能会出问题。
    redbuck
        59
    redbuck  
       2020-02-20 17:15:11 +08:00
    @beastk 会的。

    比如
    ```
    (()=>{})()
    [].map(i=>i.value)
    ```
    这样的代码就会报错。



    不过我是从来不会手动加分号的----代码能做的事干嘛要人做。
    lguan
        60
    lguan  
       2020-02-20 18:38:07 +08:00
    按团队来,我要求加,定 eslint,让 eslintrc 自动加
    pan176
        61
    pan176  
       2020-02-20 19:35:05 +08:00
    个人角度,加的。
    gzzchh
        62
    gzzchh  
       2020-02-21 05:02:35 +08:00 via Android
    习惯性加了 ,然后 jetbrains 提醒我我又一行一行去掉了
    BigFoxGod
        63
    BigFoxGod  
       2020-02-21 09:10:35 +08:00
    团队统一 eslint 规则不加
    nortonlai
        64
    nortonlai  
       2020-03-12 21:32:46 +08:00 via Android
    天天加,然后 ctrl+ s 所有分号全部被消失
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2468 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 15:44 · PVG 23:44 · LAX 07:44 · JFK 10:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.