阅读更多

如果你的代码易于阅读,那么代码中bug也将会很少,因为一些bug可以很容被调试,并且,其他开发者参与你项目时的门槛也会比较低。因此,如果项目中有多人参与,采取一个有共识的编码风格约定非常有必要。与其他一些语言相比(比如Python示例),JavaScript没有一个权威的编码风格指南,取而代之的是一些流行的编码风格: 

当然,在JavaScript语法检查器JSLintJSHint中也有一些默认的设置选择。问题是,什么才是终极的、让大多数开发者可以遵循的JavaScript编码风格呢?下面让我们从这6个风格指南中找出一些有共识的风格来。

代码风格

缩进 

  • 两个空格,无需更长的缩进,无需Tab缩进:Google、NPM、Node.js、Idiomatic
  • Tab缩进:jQuery
  • 4个空格:Crockford

 参数和表达式之间的空格 

  • 使用紧凑型风格:Google、NPM、Node.js  
project.MyClass = function(arg1, arg2) {
  • 过多地使用空格:Idiomatic, jQuery   
for ( i = 0; i < length; i++ ) {
  • 没有发表意见:Crockford   
大部分指南中,都提醒开发者不要在语句结尾处有任何的空格。

代码行长度 

  • 最多80个字符:Google、NPM、Node.js、Crockford(当在代码块中,除了2个空格外的其他缩进允许将函数参数与首个函数参数的位置对齐。另一种选择是当自动换行时使用4个空格缩进,而不是2个。)
  • 没有发表意见:jQuery、Idiomatic

 分号 

  • 始终使用分号,不依赖于隐式插入:Google、Node.js、Crockford
  • 在某些情况下不要使用expect:NPM
  • 没有发表意见:jQuery、Idiomatic

 注释 

  • 遵循JSDoc约定:Google、Idiomatic
  • 没有发表意见:NPM、Node.js、jQuery、Crockford

 引号 

  • 推荐单引号:Google、Node.js
  • 双引号:jQuery
  • 没有发表意见:NPM、Idiomatic、Crockford

 变量声明 

  • 一次声明一个,不使用逗号:Node.js  
var foo = '';
var bar = ''; 
  • 一次声明多个,在行结束处使用逗号分隔:Idiomatic、jQuery 
var foo = "",
  bar = "",
  quux; 
  • 在行开始处使用逗号:NPM
  • 没有发表意见:Google、Crockford

 大括号 

  • 在同一行使用左大括号:Google、NPM、Node.js、Idiomatic、 jQuery、Crockford 
function thisIsBlock(){
NPM指南中指出,只在代码块需要包含下一行时使用大括号,否则不使用。

全局变量 

  • 不要使用全局变量:Google、Crockford(谷歌表示,全局变量命名冲突难以调试,并可能在两个项目进行正整合时出现一些棘手的问题。为了便于共享公用的JavaScript代码,需要制定公约来避免冲突发生。Crockford认为不应该使用隐式全局变量。)
  • 没有发表意见:Idiomatic、jQuery、NPM、Node.js

 命名风格

变量命名 

  • 开始的第一个单词小写,之后的所有单词首字母大写:Google、NPM、Node.js、Idiomatic 
var foo = "";
var fooName = "";
 常量命名
  • 使用大写字母:Google、NPM、Node.js 
var CONS = 'VALUE'; 
  • 没有发表意见:jQuery、Idiomatic、Crockford

 函数命名 

  • 开始的第一个单词小写,之后的所有单词首字母大写(驼峰式):Google、NPM、Idiomatic、Node.js(推荐使用长的、具描述性的函数名) 
function veryLongOperationName
function short()..
      关键字形式的函数命名: 
function isReady()
function setName()
function getName() 
  • 没有发表意见:jQuery、Crockford

 数组命名 

  • 使用复数形式:Idiomatic  
var documents = []; 
  • 没有发表意见:Google、jQuery、NPM、Node.js、Crockford

 对象和类命名 

  • 使用如下形式:Google、NPM、Node.js 
var ThisIsObject = new Date;  
  • 没有发表意见:jQuery、Idiomatic、Crockford

 其他命名 

  • 针对长文件名和配置键使用all-lower-hyphen-css-case形式:NPM

 根据上述风格来配置.jshintrc文件

JSHint(http://www.jshint.com/)是一个JavaScript语法和风格检查工具,你可以用它来提醒代码风格相关的问题。它可以很好地被集成到许多常用的编辑器中,是统一团队编码风格的一个很好的工具。

你可以通过JSHint文档查看可用的选项:http://www.jshint.com/docs/#options

下面根据本文上面每个分类下的第一种风格来创建一个.jshintrc文件。你可以将它放到项目中根目录中,JSHint-avare代码编辑器将会按照它来统一项目中的所有代码风格。 

{
  "camelcase" : true,
  "indent": 2,
  "undef": true,
  "quotmark": single,
  "maxlen": 80,
  "trailing": true,
  "curly": true
} 

此外,你应该将下面的头添加到你的JavaScript文件中。 

/* jshint browser:true, jquery:true */ 

在Node.js文件中你应该添加: 

/*jshint node:true */ 

还可以在各种JavaScript文件中添加下面的声明: 

'use strict'; 

这将影响JSHint和你的JavaScript引擎,可能不那么兼容,但是JavaScript将会运行得更快。

在提交Git之前自动执行JSHint

如果你想确保所有的JS代码与.jshintrc中定义的风格保持一致,你可以将下面的内容添加到你的.git/hooks/pre-commit文件中,当你试图提交任何新修改的文件到项目时会自动执行风格检查。 

#!/bin/bash
# Pre-commit Git hook to run JSHint on JavaScript files.
#
# If you absolutely must commit without testing,
# use: git commit --no-verify
 
filenames=($(git diff --cached --name-only HEAD))
 
which jshint &> /dev/null
if [ $? -ne 0 ];
then
  echo "error: jshint not found"
  echo "install with: sudo npm install -g jshint"
  exit 1
fi
 
for i in "${filenames[@]}"
do
    if [[ $i =~ \.js$ ]];
    then
        echo jshint $i
        jshint $i
        if [ $? -ne 0 ];
        then
            exit 1
        fi
    fi
done
 最后祝大家编码愉快!

英文原文:JavaScript, the winning style

16
0
评论 共 19 条 请登录后发表评论
19 楼 chenbinqun 2014-08-26 22:35
  学习了!!!
18 楼 luhannaeyext 2013-07-22 12:09
谢谢分享,很受益。
17 楼 jjihuang 2013-07-16 10:35
学习了
16 楼 haoshua2013 2013-07-15 23:54
uiy67ft576
15 楼 Youkes 2013-07-15 23:42
14 楼 dianthus 2013-07-15 16:32
谢谢分享。
13 楼 kocokolo 2013-07-15 11:21
12 楼 joephoenix 2013-07-15 10:52
11 楼 damoqiongqiu 2013-07-15 09:58
【阵列命名】是不是应该是【数组命名】
10 楼 SeanWei 2013-07-13 21:39
好的东西就能值得欣赏
9 楼 SeanWei 2013-07-13 21:39
不错,真心受益!
8 楼 香煎马鲛鱼 2013-07-13 14:56
好好好好~~~~ 我对编程规范最头疼呢
7 楼 Clazz 2013-07-13 13:21
整理的详细,谢谢
6 楼 obullxl 2013-07-13 11:12
5 楼 maddemon 2013-07-12 21:19
对象实例就不要首字母大写了
4 楼 xulonghui2011 2013-07-12 14:48
恩 受教了
3 楼 aaa5131421 2013-07-12 12:34
私有成员变量前加_
2 楼 骨之灵魂 2013-07-12 06:24
作者有心了 整理的很好
1 楼 wwq100 2013-07-11 18:33

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • HEX文件和BIN文件总结及hex文件流转bin文件流示例代码

    这几天在写STM32的ISP烧录工具,因此有涉及到输入hex文件或bin文件进行烧录的问题,所以对hex文件和bin文件进行了些总结。 1 hex介绍Hex 全称 (Intel HEX)文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。在Intel HEX文件中,每一行包含一个HEX记录。这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。Intel HEX文件

  • Hex编码 十六进制编码

    import java.io.UnsupportedEncodingException;import java.net.URLEncoder;/** * HEX字符串与字节码(字符串)转换工具 */public class HexUtils {    public static void main(String[] args) throws Exception {        test(&quot;a&quot;)...

  • 一些达成共识的JavaScript编码风格约定(引)

    原文:http://www.iteye.com/news/28028-JavaScript-code-style-guide ...因此,如果项目中有多人参与,采取一个有共识的编码风格约定非常有必要。与其他一些语言相比(比如Python示例),JavaScript没有一...

  • 一些达成共识的JavaScript编码风格约定【转】

    因此,如果项目中有多人参与,采取一个有共识的编码风格约定非常有必要。与其他一些语言相比(比如Python示例),JavaScript没有一个权威的编码风格指南,取而代之的是一些流行的编码风格: Google的JavaScript...

  • 一些达成共识的JavaScript编码约定[转]

    因此,如果项目中有多人参与,采取一个有共识的编码风格约定非常有必要。与其他一些语言相比(比如Python示例),JavaScript没有一个权威的编码风格指南,取而代之的是一些流行的编码风格: Google的JavaScript风格...

  • 你应该知道的已达成共识的JavaScript编码风格约定

    因此,如果项目中有多人参与,采取一个有共识的编码风格约定非常有必要。与其他一些语言相比(比如Python示例),JavaScript没有一个权威的编码风格指南,取而代之的是一些流行的编码风格: Google的JavaScript...

  • JavaScript => JavaScript编码规范指南

    JavaScript 编码规范指南 以下文档大多来自: Google JavaScript 编码规范指南 Idiomatic 风格 对于未提及的事项可以参考airbnb的JS编码规范 airbnb/javascript 基本原则: 无论有多少人在维护,所有在代码仓库中...

  • JavaScript编码风格

    一些达成共识的JavaScript编码风格约定 http://www.csdn.net/article/2013-07-11/2816196-javascript-code-style-guide JavaScript Style Guide 1. Linting Use JSHint to detect errors and ...

  • javascript编码标准

    几乎每个人都有自己的标准,但对标准应该是什么样的,则似乎很少能达成共识。但编码标准意味着,通过共同语言和一致的结构,把开发人员从无意义的工作中解放出来。允许开发人员把创新精神放在重要的逻辑上面。一个好...

  • javascript编程风格(粗略笔记)

    调试代码风格的工具:jsHint http://www.jshint.com/ 参考资料: 一些达成共识的JavaScript编码风格约定 http://www.csdn.net/article/2013-07-11/2816196-javascript-code-style-guide   Google JavaScript代码...

  • 036GraphTheory(图论) matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

  • 026SVM用于分类时的参数优化,粒子群优化算法,用于优化核函数的c,g两个参数(SVM PSO)Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

  • 药店管理-JAVA-基于springBoot的药店管理系统的设计与实现(毕业论文+开题)

    1. 用户角色 管理员 药店员工/药师 客户 2. 功能描述 管理员功能 用户管理 创建、编辑和删除药店员工和药师的账户。 设置不同用户的权限,确保敏感信息的安全。 库存管理 实时监控药品库存状态,设置库存预警,防止缺货或过期。 支持药品入库、出库和退货记录,自动更新库存数量。 商品管理 添加、编辑和删除药品信息,包括名称、规格、价格、生产厂家、有效期等。 分类管理药品,如处方药、非处方药、保健品等。 销售管理 查看和管理销售记录,生成每日、每周和每月的销售报表。 分析销售数据,了解畅销产品和季节性变化,以优化库存。 财务管理 监控药店的收入与支出,并生成财务报表。 管理支付方式(现金、信用卡、电子支付)及退款流程。 客户管理 记录客户的基本信息和购买历史,提供个性化服务。 管理会员制度,设置积分和优惠活动。 药品监管符合性 确保药店遵循相关法规,跟踪药品的进货渠道和销售记录。 提供合规报告,确保按规定进行药品管理。 报告与分析 生成各类统计报表,包括销售分析、库存分析和客户行为分析。 提供决策支持,帮助制定更好的经营策略。 药店员工/药师功能 销售操作 处理顾客的药

  • 【网络】基于matlab高动态网络拓扑中OSPF网络计算【含Matlab源码 10964期】.zip

    Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

  • 今天吴老师上课的时候说我.txt

    今天吴老师上课的时候说我.txt

  • 检测骨架图像的交点Matlab代码.rar

    检测骨架图像的交点Matlab代码.rar

  • MMC simulink 模块化多电平变流器 载波移相 双闭环仿真 输出谐波分析,线性自抗扰控制LADRC 有仿真文件

    MMC simulink 模块化多电平变流器 载波移相 双闭环仿真 输出谐波分析,线性自抗扰控制LADRC 有仿真文件

  • 自动驾驶控制-斯坦利(stanely)算法路径跟踪仿真 matlab和carsim联合仿真搭建的无人驾驶斯坦利控制器仿真验证,可以实现双移线,圆形,以及其他自定义的路径跟踪 跟踪效果如图,几乎没有误

    自动驾驶控制-斯坦利(stanely)算法路径跟踪仿真 matlab和carsim联合仿真搭建的无人驾驶斯坦利控制器仿真验证,可以实现双移线,圆形,以及其他自定义的路径跟踪。 跟踪效果如图,几乎没有误差,跟踪误差在0.05m以内。

  • TongRDS替代Redis的基本部署和开发流程.zip

    TongRDS是redis的国产化替代品之一,里面含有相应的安装部署包及操作流程,详细介绍TongRDS的基本部署和基本开发使用。

Global site tag (gtag.js) - Google Analytics