阅读更多

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

  • kernel-devel-4.18.0-553.45.1.el8-10.x86-64.rpm

    Rocky Linux 8.10内核包

  • Simulink中三阶单环多位量化Σ-Δ调制器的设计与实现-音频带ADC的应用(复现论文或解答问题,含详细可运行代码及解释)

    内容概要:本文档详细介绍了如何在Simulink中设计一个满足特定规格的音频带ADC(模数转换器)。首先选择了三阶单环多位量化Σ-Δ调制器作为设计方案,因为这种结构能在音频带宽内提供高噪声整形效果,并且多位量化可以降低量化噪声。接着,文档展示了具体的Simulink建模步骤,包括创建模型、添加各个组件如积分器、量化器、DAC反馈以及连接它们。此外,还进行了参数设计与计算,特别是过采样率和信噪比的估算,并引入了动态元件匹配技术来减少DAC的非线性误差。性能验证部分则通过理想和非理想的仿真实验评估了系统的稳定性和各项指标,最终证明所设计的ADC能够达到预期的技术标准。 适用人群:电子工程专业学生、从事数据转换器研究或开发的技术人员。 使用场景及目标:适用于希望深入了解Σ-Δ调制器的工作原理及其在音频带ADC应用中的具体实现方法的人群。目标是掌握如何利用MATLAB/Simulink工具进行复杂电路的设计与仿真。 其他说明:文中提供了详细的Matlab代码片段用于指导读者完成整个设计流程,同时附带了一些辅助函数帮助分析仿真结果。

  • 计算机课后习题.docx### 【计算机科学】研究生入学考试计算机组成原理专项题库设计:考研复习资源集成与优化

    内容概要:该题库专为研究生入学考试计算机组成原理科目设计,涵盖名校考研真题、经典教材课后习题、章节题库和模拟试题四大核心模块。名校考研真题精选多所知名高校的计算机组成原理科目及计算机联考真题,并提供详尽解析,帮助考生把握考研命题趋势与难度。经典教材课后习题包括白中英《计算机组成原理》(第5版)和唐朔飞《计算机组成原理》(第2版)的全部课后习题解答,这两部教材被众多名校列为考研指定参考书目。章节题库精选代表性考题,注重基础知识与重难点内容,帮助考生全面掌握考试大纲要求的知识点。模拟试题依据历年考研真题命题规律和热门考点,精心编制两套全真模拟试题,并附标准答案,帮助考生检验学习成果,评估应试能力。 适用人群:计划参加研究生入学考试并报考计算机组成原理科目的考生,尤其是需要系统复习和强化训练的学生。 使用场景及目标:①通过研读名校考研真题,考生可以准确把握考研命题趋势与难度,有效评估复习成效;②通过经典教材课后习题的练习,考生可以巩固基础知识,掌握解题技巧;③通过章节题库的系统练习,考生可以全面掌握考试大纲要求的各个知识点,为备考打下坚实基础;④通过模拟试题的测试,考生可以检验学习成果,评估应试能力,为正式考试做好充分准备。 其他说明:该题库不仅提供详细的题目解析,还涵盖了计算机组成原理的各个方面,包括计算机系统概述、数据表示与运算、存储器分层、指令系统、中央处理器、总线系统和输入输出系统等。考生在使用过程中应结合理论学习与实践操作,注重理解与应用,以提高应试能力和专业知识水平。

  • __UNI__DB9970A__20250328141034.apk.1

    __UNI__DB9970A__20250328141034.apk.1

  • minio-rsc-Rust资源

    rust for minio

  • 4-4-台区智能融合终端功能模块型式规范(试行).pdf

    国网台区终端最新规范

  • 《基于YOLOv8的化工管道焊缝缺陷检测系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

  • python源码-1个机器学习相关资源

    一个简单的机器学习代码示例,使用的是经典的鸢尾花(Iris)数据集,通过 Scikit-learn 库实现了一个简单的分类模型。这个代码可以帮助你入门机器学习中的分类任务。

  • pyqt离线包,pyqt-tools离线包

    pyqt离线包,pyqt-tools离线包

Global site tag (gtag.js) - Google Analytics