我确定这是打开一罐蠕虫,但 [风格指南] 似乎有点过时,我想建议 2 处更改
const
和let
到var
?我不知道为什么var
是首选(在最近的 PR 中被告知要更改为 var)。 我的猜测是因为那是它开始的地方,因为const
和let
是新的。 但是现在代码库正在使用 ES5 模块,似乎任何保留var
理由早已不复存在。 由于import
行,要使代码在仅支持var
的浏览器上运行,代码必须通过转译器运行。 同一个转译器已经/将已经将const
和let
为var
。
此外,在var
上使用const
和let
有具体的客观积极因素。 两者的范围都限定在大括号而不是函数范围内。 不像var
那样创建全局变量。 当然,大部分代码现在都使用var
(尽管 IIRC eslint 可以自动修复)。 将 linter 更改为需要const
和let
并慢慢更改遗留代码将防止更多错误和泄漏。 同样const
和let
到处都使用,可以启用 eslint 检查更多未定义的变量,这至少对我来说是一个巨大的帮助。
曾经有一段时间var
更快,但那个时代已经一去不复返了。
是时候停止使用var
吗?
这可能是 Doob 先生的个人偏好,但我的猜测更多的是它是 IE 时代遗留下来的。 IE 不支持尾随逗号,但现在正在进行转译,为了 IE 兼容性,转译器将删除尾随逗号。 对于开发人员来说,尾随逗号是一种胜利,因为它们会导致更少的错误。 通常被捕获但通常需要至少一次迭代才能捕获的错误,在浏览器中运行并查看语法错误然后返回并编辑逗号。 至少根据我的经验,尾随逗号避免了这个问题。
通过在多行数组和对象中拖尾逗号,我的意思是例如
const sizes = [
100,
200,
300,
];
和
const options = {
width: 100,
height: 200,
depth: 300,
};
使用尾随逗号添加或删除行只需要处理一行。 使用尾随逗号意味着始终必须知道最后一个逗号是删除或添加它。
当然,无论决定如何都可以,我会按照 PR 指南进行操作。 我只是想在代码切换到 ES5 模块时询问是否是时候重新访问一些样式指南(注意var
部分实际上不在样式指南中。)
曾经有一段时间 var 更快,但那段时间已经一去不复返了。
你这是基于什么? IIRC 上次我们对此进行测试时, const
没有区别,但let
稍慢。 很高兴看到一些更新的测试。
允许在多行数组和对象中使用尾随逗号
如果 IE 没有问题,绝对同意此更改(我们仍然希望至少支持 IE 10 和 11,对吗?)。
曾经有一段时间 var 更快,但那段时间已经一去不复返了。
你这是基于什么? IIRC 上次我们对此进行测试时,
const
没有区别,但let
稍慢。 很高兴看到一些更新的测试。
是的,一些数字会有助于这个决定。
允许在多行数组和对象中使用尾随逗号
通过在多行数组和对象中拖尾逗号,我的意思是例如
const sizes = [ 100, 200, 300, ];
我的大脑是这样读的:
const sizes = [
100,
200,
300, undefined
];
这些天JS解释器删除了那个逗号?
我个人不赞成在多行数组中使用尾随逗号,因为我也觉得阅读起来很不寻常。
对我来说,尾随逗号的目的是可以更快地添加和删除内容,以及通过剪切/粘贴来重新排序。 不用担心你是否只剪掉最后一项,每一行都是一样的。 至于看到undefined
,如果您知道每行只有一个项目,则很容易避免这种情况 - 并且在数组位于一行(如[1, 2, 3, 4, 5]
您不会添加尾随逗号。
另一方面,我认为这两种方式都不重要。 切换到const
/ let
是这里的重要问题。
......但现在正在发生转译......
我们不是在转译,是吗? Rollup 只是替换了 ES6 的导入/导出语法,而其他所有东西都单独存在,除非你添加了像rollup-plugin-buble这样let
/ const
。
尾随逗号也有更大的用途,而不仅仅是“易于使用”。 在有很多人参与的大型项目中,使用git blame
来找出谁负责哪段代码是很有用的。
所以,在这里说明一个明显的问题:如果在多行中列出了由@mrdoob添加的
我个人反对使用尾随逗号,原因与我之前的人所说的完全相同,但我确实看到了好处,而且我现在已经习惯了,因为我们自今年以来也在办公室强制执行此操作。
这些天JS解释器删除了那个逗号?
是的。
关于let
与var
:
如果归结为性能, let
和var
之间的区别如今已不再重要。 V8 和 Spidermonkey (Firefox) 现在有很好的优化,效果很好。
请参阅这篇文章以获得详细说明(确保运行实际的片段以查看差异现在几乎可以忽略不计): https :
该问题的公认答案还从功能的角度指出了var
和let
之间的区别,因为它们都有_非常_不同的含义和用例,以防万一不清楚对任何人。
将const
用于永远不会改变的变量是显而易见的。 如果 javascript 引擎可以看到一个变量是用const
,它就知道它的值永远不会再改变,因此可以对其进行大量优化。
只有我的 2 美分。
以供参考:
尾随逗号是我见过的最好的 js 模式之一,它使差异更加清晰。
这些天JS解释器删除了那个逗号?
除 IE 外,所有浏览器在数组和对象中使用该逗号已超过 10 年
让我补充一点,而不是将它视为奇怪的事情,另一个 POV 是语法实际上是逗号是必需的,它只是浏览器让您休息一下,不需要最后一个。 一个人的陌生,就是另一个人的美。 我发现每一行的一致性都比最后一行不同更令人愉悦。 当然,这些都是个人喜好,我只是提出了另一种看待事物的方式。
至于差异,我在网上找到了这些比较
没有尾随逗号差异添加一行
尾随逗号差异添加一行
让我们先从let
和const
开始。 一步一步来。
我认为这些时间太接近了。 我得到不同的结果
尽管在 Chrome 70 中它们并没有远程关闭
当我们在做的时候
让我为尾随逗号再添加一个 POV 😜 你可以看到尾随逗号类似于分号
这是完全合法的代码
{
doThis();
doThat();
doOther()
}
最后一行缺少分号。 一种观点是将逗号视为同一件事。 也许这就像人/灯的错觉。
无论你看到2个人还是一根灯杆都是有效的。 但在这种情况下,使用逗号,因为两个 POV 都适合(“逗号结尾看起来像,未定义”与“逗号缺失看起来不一致”)一个有客观的好处,另一个没有......?
我尝试在代码中的某处添加一个const
并且它不再编译......
@mrdoob输出格式应设置为ES6
而不是ES
或ES5
。
以#6419 结束。
最有用的评论
除 IE 外,所有浏览器在数组和对象中使用该逗号已超过 10 年
让我补充一点,而不是将它视为奇怪的事情,另一个 POV 是语法实际上是逗号是必需的,它只是浏览器让您休息一下,不需要最后一个。 一个人的陌生,就是另一个人的美。 我发现每一行的一致性都比最后一行不同更令人愉悦。 当然,这些都是个人喜好,我只是提出了另一种看待事物的方式。
至于差异,我在网上找到了这些比较
没有尾随逗号差异添加一行
尾随逗号差异添加一行