对于那些还不熟悉JavaScript的编写风格的人,谷歌提供了编写JavaScript的编写风格指南,谷歌风格指南 其中列出了编写干净、可理解代码的最佳风格实践。
谷歌和Airbnb有两个最受欢迎的编写风格指南。如果我的工作是花费大量时间编写JS,那么可以先学习这两种方法。
以下是谷歌JS风格指南中我认为最有趣和相关的13条规则:
谷歌JS风格指南处理各种各样的问题,从激烈争论的问题(制表符与空格的比较,以及分号应该如何使用这个有争议的问题),到一些更模糊的规范,这些规范令我吃惊,它们肯定会改变我以后写JS的方式。
对于每个规则,我将对规范进行总结,然后引用样式指南中的支持部分,详细描述该规则。在适用的情况下,我还将提供实践中的样式示例,并将其与不遵循规则的代码进行对比。
使用空格,而不是制表符
除了行结束符序列之外,ASCII水平空格字符(0x20)是源文件中出现在任何位置的惟一空格字符。这意味着…制表符不用于缩进
使用两个空格(而不是四个)进行缩进
分号是必需的
虽然无法想象为什么会有人反对这个想法,但JS中分号的一致使用正在成为新的“空格对制表符”的争论。谷歌一惯建议结束需要使用分号。
不要使用 ES6 模块
不要使用ES6模块(即导出和导入关键字),因为它们的语义还没有最终确定。注意,一旦语义完全标准,将重新定义使用的方式。
// 先别做这种事//------ lib.js ------export function square(x) { return x * x;}export function diag(x, y) { return sqrt(square(x) + square(y));}//------ main.js ------import { square, diag } from 'lib';
不鼓励(但不禁止)水平对齐
水平对齐是在代码中添加可变数量的额外空格,以使某行变量的值与前面变量值对齐。
不要再使用 var 了
使用const或let声明所有本地变量来代替 var。默认情况下使用 const,除非需要重新分配变量在使用 let 声明。
// badvar example = 42;// goodlet example = 42;
箭头函数是首选
老实说,我只是觉得箭头函数很棒因为它们更简洁,更美观。事实证明,它们还有一个非常重要的用途。
使用模板字符串而不是拼接客串
在复杂的字符串连接上使用模板字符串(用`分隔),特别是在涉及多个字符串文本时,模板字符串可以跨越多行。
不要对长字符串使用 \ 来表示连续
不要在普通或模板字符串文字中使用连续行(也就是说,在字符串文字中以反斜杠结束一行)。尽管ES5允许这样做,但是如果斜杠后面有任何尾随空格,那么可能会导致一些棘手的错误,而且对读者来说不太明显。
有趣的是,谷歌和Airbnb不同意这个规则(这是Airbnb的规范)。
虽然谷歌建议连接更长的字符串(如下所示),Airbnb的风格指南基本上建议什么也不做,并允许长字符串继续,只要他们需要。
for…of 是for 循环的首选类型
如果您问我,这是一个奇怪的问题,但是我认为我应该包含它,因为谷歌声明了一种首选的for循环类型,这非常有趣。
不要使用eval()
MDN 页面的eval()中,甚至有一个名为“不要使用eval!”
常量应该用全大写字母命名,用下划线分隔
一个值得注意的例外是,如果常量是函数作用域的。在这种情况下,应该用camelCase来写。
每次声明一个变量
每个局部变量声明只声明一个变量:声明如令a = 1, b = 2,不推荐。
使用单引号,而不是双引号
普通的字符串用单引号(')分隔,而不是双引号(")。
提示:如果字符串包含单引号字符,可以考虑使用模板字符串来避免转义引号。
最后一个注意
正如我在开始时所说,这些不是强制要求。谷歌只是众多科技巨头之一,这些只是推荐。
也就是说,看看谷歌这样的公司提出的风格建议是很有趣的,这家公司雇佣了很多才华横溢的人,他们花了很多时间编写优秀的代码。
如果你想要遵循“符合谷歌的源代码”的指导原则,那么你可以遵循这些规则—但是,当然,许多人不同意这些规则,你可以随意忽略这些规则中的任何一个或所有规则。
我个人认为在很多情况下Airbnb的规范比谷歌更有吸引力。无论您对这些特定的规则采取何种立场,在编写任何类型的代码时,始终牢记风格一致性仍然很重要。