阅读更多

如果你的代码易于阅读,那么代码中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代码...

  • MATLAB实现基于YALMIP+CPLEX的电动汽车削峰填谷多目标优化调度

    内容概要:本文详细介绍了利用MATLAB及其工具箱YALMIP和CPLEX进行电动汽车削峰填谷的多目标优化调度方法。通过设定不同的权重系数,将电池损耗成本、峰谷差以及负荷波动三个关键因素整合为目标函数,实现了对电动汽车充放电行为的有效管理。文中不仅展示了具体的数学模型和代码实现,还讨论了求解过程中的一些技巧和注意事项,如充放电互斥约束的设计、求解器的选择与配置等。此外,作者通过实例演示了优化前后负荷曲线的变化情况,证明了该方法能够显著改善电网负荷分布。 适合人群:从事智能电网、能源管理系统开发的研究人员和技术人员,尤其是那些希望深入了解电动汽车参与电网调度的技术细节的人。 使用场景及目标:适用于需要解决电网负荷不均衡问题的实际应用场景,旨在通过合理的电动汽车调度策略,在保障用户利益的同时提高整个电力系统的运行效率和稳定性。 其他说明:文中提到的方法可以作为研究和开发类似系统的参考案例,同时也强调了在实际应用中需要根据具体情况进行调整和优化。

  • 三菱FX5U PLC ST语言加密与授权管理系统的解析及应用

    内容概要:本文详细介绍了三菱FX5U PLC的加密与授权管理系统,主要基于ST(Structured Text)语言实现。文中展示了多个关键模块的设计思路和技术细节,如授权验证逻辑、时间预警机制、通信检测、程序块加密以及硬件抽象层设计。授权验证逻辑通过预存密钥数组进行分期授权和永久授权的管理;时间预警机制利用定时器和系统时钟确保授权到期前提醒用户;通信检测采用心跳包机制保障通信安全;程序块加密通过预处理器指令和无效代码混淆保护源代码;硬件抽象层设计使得系统能够适应不同型号的PLC。此外,还讨论了移植性和客户破解防范措施。 适合人群:从事工业控制系统开发的技术人员,尤其是对PLC编程和系统安全有兴趣的专业人士。 使用场景及目标:适用于需要对PLC系统进行高级加密和授权管理的工程项目,旨在提高系统的安全性和可控性,防止未经授权的操作和访问。 其他说明:本文不仅提供了具体的代码实现,还深入探讨了设计理念和技术难点,帮助读者全面理解并应用于实际项目中。

  • OpenSSH 是一个免费的 SSH 连接工具,广泛用于安全的远程登录和文件传输 本项目提供了RPM包的形式对OpenSSH进行升级,以确保您使用的是最新版本 特性 提供 RPM 包升级到最新版本

    1. 开启root登录 2.启用PAM 3.关闭selinux 4.操作以下内容 cat > /etc/pam.d/sshd << EOF #%PAM-1.0 auth required pam_sepermit.so auth include password-auth account required pam_nologin.so account include password-auth password include password-auth session required pam_limits.so session required pam_selinux.so close session required pam_loginuid.so session optional pam_keyinit.so force revoke session include password-auth EOF

  • Delphi 12.3控件之Pascal Expert 9.12.14 For Delphi 12 CS.7z

    Delphi 12.3控件之Pascal Expert 9.12.14 For Delphi 12 [CS].7z

  • 数据科学领域中层次聚类算法的详细解析及其Python实现

    内容概要:本文全面介绍了层次聚类算法,一种无监督学习方法,广泛应用于数据挖掘、机器学习和模式识别。文章首先阐述了聚类算法的基础理论,特别是层次聚类的独特之处——生成树状图展示数据点之间的相似性关系。随后,详细讲解了凝聚型层次聚类的工作原理,包括初始化、合并和重复步骤,并探讨了多种距离度量方法(如单链、完全链、平均链和重心法)。文中通过Python代码实例展示了如何使用SciPy库进行层次聚类,并生成树状图。此外,文章还讨论了层次聚类在生物信息学、图像分割和文本数据分析中的具体应用场景,以及评估聚类质量的方法(如轮廓系数和Calinski-Harabasz指数)。最后,文章总结了层次聚类的优点和缺点,并展望了未来的优化方向和挑战。 适合人群:数据科学家、机器学习工程师、研究人员和其他对聚类算法感兴趣的从业者。 使用场景及目标:①理解层次聚类的基本原理和工作流程;②掌握如何使用Python实现层次聚类;③学会评估聚类质量和优化聚类性能;④了解层次聚类在不同领域的应用。 其他说明:本文不仅提供了理论知识,还包括丰富的代码示例,使读者能够在实践中加深对层次聚类的理解。同时,文章还探讨了层次聚类

  • 30kW三相PFC充电桩核心技术解析:基于TMS320F28069的高精度控制与算法实现

    内容概要:本文深入探讨了一款30kW三相PFC充电桩的技术细节,涵盖硬件设计、主控芯片选择、关键算法实现及其性能表现。文中详细介绍了主电路采用的T型三相维也纳结构,主控芯片TMS320F28069的特点及其应用,包括CLA协处理器的优势。同时,对锁相环算法、PWM控制、中点平衡控制等进行了详细的解释,并提供了相应的代码示例。此外,还分享了一些实战经验和注意事项,如DQ变换的正确实现、滞回控制的应用技巧等。最后,附上了27页的量产测试报告,展示了该程序在实际生产环境中的稳定性和可靠性。 适合人群:从事电力电子、嵌入式系统开发的专业人士,尤其是对大功率充电设备感兴趣的工程师和技术爱好者。 使用场景及目标:适用于希望深入了解30kW三相PFC充电桩内部工作机制的研发人员。通过学习本文,可以掌握从硬件设计到软件实现的完整流程,为类似项目提供宝贵的参考资料和技术支持。 其他说明:本文不仅提供了理论知识,还结合了大量的实战经验,帮助读者避免常见陷阱,提高开发效率。

  • ssm个人健康信息管理lw+ppt.zip

    Java项目基于ssm框架的课程设计,包含LW+ppt

  • 基于YOLOv8深度学习的布料外观缺陷检测系统(带GUI界面)(Python源码+Pyqt5界面+2100多张标注好的数据集+安装使用教程+训练好的模型+评估指标曲线+演示图片视频),开箱即用

    基于YOLOv8深度学习的布料外观缺陷检测系统(带GUI界面)(Python源码+Pyqt5界面+2100多张标注好的数据集+安装使用教程+训练好的模型+评估指标曲线+演示图片视频),开箱即用 高准确率,6个类别:带沙,断沙,面球,破洞,脱沙,污渍。 1、该资源内项目代码都经过本人训练测试并运行成功,功能都OK的情况下才上传的,请放心下载使用!有问题请私信我,提供技术支持。 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、日常作业、实战项目演示等。 3、可参考学习,也可在此基础上略做修改,以实现其他功能,也可直接用于毕设、课设和作业等。 升级版YOLO11资源详情展示:https://blog.csdn.net/m0_37302966/article/details/146467358 更多资源下载:https://blog.csdn.net/m0_37302966/article/details/146387003

  • 计算机大学生如何让别人能够访问到自己的项目(springboot+vue简单版)

    远程连接工具

Global site tag (gtag.js) - Google Analytics