You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// badfunctionsayHi(name){return'How are you, '+name+'?';}// badfunctionsayHi(name){return['How are you, ',name,'?'].join();}// badfunctionsayHi(name){return`How are you, ${name}?`;}// goodfunctionsayHi(name){return`How are you, ${name}?`;}
// bad (建议在PC端阅读)constlongString='This is a very long string that \ far exceeds the 80 column limit. It unfortunately \ contains long stretches of spaces due to how the \ continued lines are indented.';// goodconstlongString='This is a very long string that '+'far exceeds the 80 column limit. It does not contain '+'long stretches of spaces since the concatenated '+'strings are cleaner.';
// badletobj={a: 20,b: 30};letpropName=getPropName();// returns "a" or "b"eval('var result = obj.'+propName);// goodletobj={a: 20,b: 30};letpropName=getPropName();// returns "a" or "b"letresult=obj[propName];// obj[ "a" ] is the same as obj.a
// badletdirective="No identification of self or mission."// badletsaying='Say it ain\u0027t so.';// goodletdirective='No identification of self or mission.';// goodletsaying=`Say it ain't so`;
Google为了那些还不熟悉代码规范的人发布了一个JS代码规范。其中列出了编写简洁易懂的代码所应该做的最佳实践。
代码规范并不是一种编写正确JavaScript代码的规则,而是为了保持源代码编写模式一致的一种选择。对于JavaScript语言尤其如此,因为它灵活并且约束较少,允许开发者使用许多不同的编码样式。
Google和Airbnb各自占据着当前最流行的编码规范的半壁江山。如果你会在编写JS代码上投入很长时间的话,我强烈推荐你通读一遍这两家公司的编码规范。
接下来要写的是我个人认为在Google的代码规范中,与日常开发密切相关的十三条规则。
它们处理的问题都非常具有争议性,包括tab与空格、是否强制使用分号等等。还有一些令我感到惊讶的规则,往往最后都改变了我编写JS代码的习惯。
对于每一条规则,我都会先给出规范的摘要,然后引用规范中的详细说明。我还会举一些适当的反例论证遵守这些规则的重要性。
使用空格代替tab
规范随后指出应该使用2个,而不是4个空格带实现缩进。
不能省略分号
尽管我不明白为什么会有人反对这个规则,但目前分号的使用问题显然已经像“空格 vs tab”这个问题一样产生了巨大的争议。而Google对此表示分号是必须的,是不可省略的。
暂时不要使用ES6 module
不推荐代码水平对齐
对代码进行水平对齐会在代码中添加若干多余的空格,这让相邻两行的字符看上去处于一条垂直线上。
杜绝var
我不知道是因为没有人能说服他们,还是说因为旧习难改。目前我仍能看到许多人在StackOverFlow或其他地方使用var声明变量。
优先使用箭头函数
坦白说,我曾以为箭头函数的作用只在于简洁美观。但现在我发现原来它们还有更重要的作用。
使用模板字符串取代连接字符串
不要使用续行符分割长字符串
这条规则很有趣,因为Airbnb的规范中有一条与之不相同的规则
Google推荐下面这样的写法,而Airbnb则认为应该顺其自然,不做特殊处理,该多长就多长。
优先使用
for...of
真有趣,Google居然会特别指定一种for循环。虽然这很奇怪,但不影响我接受这一观点。
以前我认为
for...in
适合遍历Object,而for...of
适合遍历数组。因为我喜欢这种各司其职的使用方式。尽管Google的规范与这种使用方式相冲突,但Google对
for...of
的偏爱依然让我觉得十分有趣。不要使用eval语句
MDN中有一节专门提到不要使用eval语句。
常量的命名规范
如果你确定一定以及肯定一个变量值以后不会被修改,你可以将它的名称使用全大写模式改写,暗示这是一个常量,请不要修改它的值。
遵守这条规则时需要注意的一点是,如果这个常量是一个函数,那么应该使用驼峰式命名法。
每次只声明一个变量
使用单引号
总结
就像我在开头所说那样,规范中没有需要强制执行的命令。尽管Google是科技巨头之一,但这份代码规范也仅仅是用来当作参考罢了。
Google是一家人才汇聚的科技公司,雇佣着出色的程序员来编写优秀的代码。能够看到这样的公司发布的代码规范是一件很有趣的事情。
如果你想要实现一种Google式的代码,那么你可以在项目中制定这些规范。但你可能并不赞成这份代码规范,这时也没有人会阻拦你舍弃其中某些规则。
我个人认为在某些场景下,Airbnb的代码规范比Google的代码规范要出色。但不管你支持哪一种,也不管你编写的是什么类型的代码,最重要的是在脑海中时刻遵守着同一份代码规范。
The text was updated successfully, but these errors were encountered: