当 VS Code Beautify 遇到空合并运算符和可选链时产生空格

928 阅读1分钟

JavaScriptVS 代码美化

本来我用Prettier的,但是我对HTML中神秘的换行感到厌恶,即使设置也无法覆盖,所以我切换到了Beautify。
但是,Beautify 已经停止更新很久了,也没有跟上 JS 的更新。
特别是,如果您只是从 VS Code 安装它,美花代码的时候可选链和空合并运算符的?两侧生成空格。

// before
a ?? b;
array[0]?.func();

// after(構文エラーになる)
a ? ? b;
array[0] ? .func();

我认为这会很奇怪,所以我去看了这个问题。
中断可选链 (?.) 和空值合并运算符 (??) · 问题 # 401 · HookyQR / VSCodeBeautify
更新到实际的 js-beautify 版本? · 问题 # 346 · HookyQR / VSCodeBeautify

js-beautify显然,您需要自己提高用于美化的自身版本。
执行以下检查后出来的命令

# 进入beautify扩展安装目录
$ cd ~/.vscode/extensions/hookyqr.beautify-1.5.0

# 执行
$ npm update

# 1.11.0 以上版本OK
$ npm list | js-beautify
├── js-beautify@1.14.0

当我在更新完成后重新启动(重新加载)VS Code 时,它可以正常工作。

js中,双问号??和双竖杠||的区别: 它们的共同特点是语法一样,前面是值,后面也是值,中间是符号; 都是根据前面的值来决定到底取前面还是取后面。

双竖杠||,只要前面的值转为布尔值为false时,就取后面,否则取前面,如undefined、null、false、空字符串和数值0

而双问号则为:前面的值为null、undefined,则取后面的值,否则都取前面的值。

由此可以发现,双问号??更加适合在不知道变量是否定义时,或者是否赋值时的场景来使用。