美文网首页
JavaScript之编码风格

JavaScript之编码风格

作者: 贵在随心 | 来源:发表于2017-11-12 19:56 被阅读16次

在web项目开发过程中,为了是整个项目开发更加规范化、减少沟通成本和提高效率,对编码的规范还是很重要的一部分。以下就近期的项目经验,针对JavaScript的编码,做了如下的约定。

1、变量与声明:
1.1 声明前使用var 关键字

// bad
golobalVariable

// good
var globalVariable

1.2 变量声明中不能使用逗号分隔名一串变量

// bad
var items = getItems(),
    goSportsTeam = true,
    dragonball = 'z'; 

// good
var items = getItems();
var isGoSportsTeam = true;
var dragonball = 'z';

1.3 不要使用链式变量声明

// bad 
var a = b = c =1;

//good 
var a = 1;
var b = 1;
var c = 1;

1.2 变量在函数内部或者循环控制条件之前提前声明

// bad 
function test() {
  for(var i = 0; i < list.length; i++) {
    var item = list[i];
  }
}

//good 
function test() {
  var i;
  var len = list.length;
  var item;
  for(i = 0; i < len; i++) {
    item = list[i];
  }
}

1.4 私有变量函数前置_标识

// bad 
MyConstrctor.prototype.private = function() {};

// good 
function _private() {}
MyConstructor.prototype._private = _private;

1.5 变量的命名规则最好是具象的,布尔值需要带 is, has, can, 单位值需要带 _ms, _s, _px 等

// bad 
var height = $("#test").height();
var delay = 3 * 1000;
var readYet = true;

// good 
var height_px = $("#test").height();
var delay_ms = 3 * 1000;
var isRead = true; 

1.6 构造器首字母大写,方法变量要遵守驼峰命名规则

// bad 
function generatortestpage() {};
generatortestpage.prototype.testpage = function() {};

// good
function GeneratorTestPage() {}
GeneratorTestPage.prototype.testPage = function() {};

2、常量
2.1 常量需要大写
2.2 常量需要定义在文件的头部,并使用_分割

// bad 
var maxNumber = 13;

// good
var MAX_NUMBER = 13;

3、函数
3.1 函数内部不允许嵌套函数
3.2 函数内部不允许使用 arguments.callee 和 arguments.caller
3.3 函数参数不得超过5个参数(多于5个使用对象类型代替)

// bad 
function testFunc(a,b,c,d,e,f,g,h) { }

// good 
functiontestFunc(params) {
  var a = params.a;
  var b = params.b;
}

4、异常处理
4.1 允许使用 try/catch 语句,不能使用debugger、console、alert等关键字调试异常

5、循环
5.1 为了可读性,循环使用for,尽量避免使用while
5.2 出于性能考虑,在循环内不允许定义函数和变量

6、控制逻辑
6.1 判断的表达式必须放在“{}”中

// bad 
if (5 = n) // ...

// good
if (5 == n) {
  // do something...
}

6.2 控制流程语句中不能使用var 定义变量
6.3 分支超过5种判断使用 switch/case,在 switch/case 语句中必须带default
6.4 判断使用严格类型判断0、null、undefined, 固定字符使用 “===”
6.5 若判断条件过长,可以酌情换行或者用变量标识

// bad
if ((foo === 123 || bar === 'abc') && doesItLookGoodWhenItBecomesThatLong() && isThisReallyHappening()) {
  thing1();
} 

// good 
if (
  (foo === 123 || bar === 'abc') && 
  doesItLookGoodWhenItBecomesThatLong() && 
  isThisReallyHappening()
) {
  thing1();
}

// good 
var isType = (foo === 123 || bar === 'abc');
var hasTolong = doesItLookGoodWhenItBecomesThatLong();
var isHappend = isThisReallyHappening();
if(isType && hasTolong && isHappend) {}

7、字符串
7.1 允许使用多行字符串,使用“+” 或者 “\” 分割

// bad 
var str = "<div><span><a href='#'>myhref</a></span></div>";

// good 
var str = "<div>\
               <span>\
                  <a href='#'>myhref</a>\
              </span>\
            </div>";

8、原型
8.1 禁止对Sring、Array 等原生对象进行原型修改

// bad 
String.ptototype.preventChangePrototype = function() {}

// good 
function preventChangePrototype() {}

8.2 由于子类会相互影响,原型上不允许保存属性,只能保存方法

9、注释
9.1 文件开头必须有文件说明注释,时间,作者

/* 
 * @Author: cxg
 * @Date:   2017-09-16 21:04:07
 * @Last Modified by:   cxg
 * @Last Modified time: 2017-09-25 14:03:52
 * @fileOverview 本文件用于XXX,实现了XXX 方法, 注意事项XXX
 */

9.2 使用“/** ... */”进行多行注释

// bad
// make() returns a new element
// based on the passed in tag name
//
// @param {String} tag
// @return {Element} element
function make(tag) {

  // ...

  return element;
}

// good
/**
 * make() returns a new element
 * based on the passed-in tag name
 */
function make(tag) {

  // ...

  return element;
}

9.3 使用“//”单行注释。这个注释必须独占一行,若注释在块级作用域的第一行,注释前可以不用空一行,如果注释不在第一行,需要空一行在注释

// bad
const active = true;  // is current tab

// good
// is current tab
const active = true;

// bad
function getType() {
  console.log('fetching type...');
  // set the default type to 'no type'
  const type = this.type || 'no type';

  return type;
}

// good
function getType() {
  console.log('fetching type...');

  // set the default type to 'no type'
  const type = this.type || 'no type';

  return type;
}

// also good
function getType() {
  // set the default type to 'no type'
  const type = this.type || 'no type';

  return type;
}

9.4 在注释前加上 FIXME 和 TODO。FIXME:需要搞清楚这个问题,TODO:需要实现

class Calculator extends Abacus {
  constructor() {
    super();

    // FIXME: 在这里不能设置为全局变量
    total = 0;
  }
}

class Calculator extends Abacus {
  constructor() {
    super();

    // TODO: total 需要在 options 参数里配置
    this.total = 0;
  }
}

备注:对于分号和逗号的使用需要注意:
1、赋值、定义、返回值、方法调用后需要强制加分号
2、对象最后一个属性不要带逗号

戳我博客

相关文章

  • JavaScript之编码风格

    在web项目开发过程中,为了是整个项目开发更加规范化、减少沟通成本和提高效率,对编码的规范还是很重要的一部分。以下...

  • JavaScript 编码风格指南

    写作本文旨在加深自己印象,也为了更多人的了解到JS编码风格,提高自己的编码质量想了解更多的内容请阅读《编写可维护的...

  • JavaScript编码风格指南

    首次发表在个人博客 前言 程序语言的编码风格指南对于一个长期维护的软件而言是非常重要的;好的编程风格有助于写出质量...

  • js开发规范

    JavaScript编码规范 1 前言 [2 代码风格] [2.1 文件] [2.2 结构] [2.2.1 缩进]...

  • React最佳实践

    tags:开发随笔 代码风格 用ES6,遵循Airbnb的React编码规范和javascript 编码规范。两个...

  • JavaScript编码规范

    JavaScript编码规范 1 前言 2 代码风格 2.1 文件 2.2 结构 2.2.1 缩进 2.2.2 空...

  • JavaScript编码规范

    JavaScript编码规范 1 前言 2 代码风格 2.1 文件 2.2 结构 2.2.1 缩进 2.2.2 空...

  • 20161101学习内容

    近期需要学习的内容 编码规范 JavaScript 规范和风格:例如 airbnb 语言 Node.js Type...

  • JavaScript编码风格指南:二、注释

    2.1 单行注释 独占一行的注释,用来解释下一行代码。这行注释之前总有一个空行,且缩进层级和下一行代码保持一致。 ...

  • 英文文档翻译--Kotlin(三、编码习惯)

    编码习惯 Kotlin 的语言编码风格 命名风格 命名风格默认和 Java 编码习惯一样,比如: 命名使用驼峰风格...

网友评论

      本文标题:JavaScript之编码风格

      本文链接:https://www.haomeiwen.com/subject/bqljextx.html