github原址:https://github.com/airbnb/javascript

类型
*基本类型:包括string、number、boolean、null、undefined,存储的是值本身
*引用类型:包括object、array、function,存储的是值的引用

对象
*使用对象字面量创建对象,而不是构造函数

//bad
var item = new Object();
//good
var item = {};

*不要使用保留字作为键名,它们在IE8下不工作
*使用同义词替换需要使用的保留字

数组
*使用"[]"直接创建数组,而不是构造函数
*向数组增加元素时使用Array.push()来代替直接赋值

var newArray = [];
//bad
newArray[newArray.length] = 'abcd';
//good
newArray.push('abcd');

*当需要拷贝数组时,使用Array.slice()来代替循环赋值

var array = ['1','2','3'...];
var arrayCopy = [];
//bad
for(var i = 0; i < array.length; i++) {
    arrayCopy[i] = array[i];
}
//good
arrayCopy = array.slice();

字符串
*使用单引号' '包裹字符串

//bad
var name = "Bob Parr";
//good
var name = 'Bob Parr';

*程序生成的字符串使用Array.join()连接,而不是使用连接符"+"

var items;
var i;
var message = ['message1','message2','message3'];
//bad
function list(message) {
    items = '<ul>';
    for(i = 0; i < message.length; i++){
        items += '<li>' + message[i] + '</li>';
    }
    return items + '</ul>';
}
//good
function list(message) {
    items = [];
    for(i = 0; i < message.length; i++) {
        items.push('<li>' + message[i] + '</li>');
    }
    return '<ul>' + items.join('') + '</ul>';
}

属性
*使用"."来访问对象的属性,而不是中括号['属性名']

var luke = {
    jedi: true,
    age: 28
};
//bad
var isJedi = luke['jedi'];
//good
var isJedi = luke.jedi;

*当通过变量访问属性时才使用中括号['属性名']

var luke = {
    jedi: true,
    age: 28
};
function getProp(prop) {
    return luke[prop];
}
var isJedi = getProp('jedi');

变量
*总是使用var来声明变量,省略var将导致产生全局变量,应避免污染全局命名空间
*使用var声明每一个变量,这样你永远不用担心将","错写成";"

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

*总是在作用域顶部声明变量,这将帮助你避免变量声明提升带来的相关问题

提升
*变量声明会被提升至作用域顶部,但赋值不会

function example() {
    console.log(value);    //undefined
    var value = true;
}

*命名函数表达式会提升变量名到作用域顶端,但不会提升函数名和函数体
*函数声明会提升函数名和函数体

运算符
*优先使用===和!==而不是==和!=
*if语句中的判断条件总是遵守下面的规则:
对象被认为true
Undefined被认为false
Null被认为false
布尔值被认为true或false
数字如果是+0、-0或NaN被认为false,否则为true
字符串如果是空字符串'',被认为false,否则为true

代码块
*使用大括号包裹所有的多行代码块

//bad
if(test)
    return false;
//good
if(test){
    return false;
}

*如果是if和else构成的多行代码块,把else放在if代码块关闭括号的同一行

注释
*使用/** ... */作为多行注释

/**
 *第一行注释
 *第二行注释
 *...
 */

*使用//作为单行注释,在被注释对象上面另起一行使用单行注释,在注释前插入空行

//bad
var active = true; // is current tab
//good //is current tab var active = true;

空白
*在大括号前放一个空格

//bad
function test(){
    console.log('test');
}
//good
function test() {
    console.log('test');
}

*在控制语句(if、while等)的小括号前放一个空格,在函数的调用及声明中,不在函数的参数列表前加空格

//bad
if(ifJedi) {}
//good
if (ifJedi) {}
//bad
function fight () {}
//good
function fight() {}

*使用空格把运算符隔开
*在块末或新语句前插入空行

逗号
*不要将逗号放在行首

//bad
var story = [
    once
    ,upon
    ,aTime
];
//good
var story = [
    once,
    upon,
    aTime
];

*额外的行末逗号不需要

//bad
var hero = {
    firstName: 'Kevin',
    lastName: 'Flynn',
};
//good
var hero = {
    firstName: 'Kevin',
    lastName: 'Flynn'
};

分号
*在自执行的匿名函数前面加一个分号,防止文件压缩合并时出错

//good
;(function(){})()

命名规则
*避免单子母命名,命名应具备描述性
*使用驼峰命名对象和函数
*使用帕斯卡式命名构造函数或类
*不要使用下划线前/后缀
*不要保存this的引用,使用Function.bind()
*总是给函数命名
*如果你的文件导出一个类,那你的文件名应该与类名完全相同

构造函数
*给对象原型分配方法,而不是使用一个新对象覆盖原型,覆盖原型将导致继承出现问题

function Jedi() {
  console.log('new jedi');
}

// bad
Jedi.prototype = {
  fight: function fight() {
    console.log('fighting');
  },

  block: function block() {
    console.log('blocking');
  }
};

// good
Jedi.prototype.fight = function fight() {
  console.log('fighting');
};

Jedi.prototype.block = function block() {
  console.log('blocking');
};

*方法可以通过返回this来实现方法链式调用

jQuery
*使用$作为存储jQuery对象的变量名前缀

//bad
var sidebar = $('.sidebar');
//good
var $sidebar = $('.sidebar');

*缓存jQuery查询

//bad
function setSidebar() {
    $('.sidebar').hide();
    $('.sidebar').css();
}
//good
function setSidebar() {
    var $sidebar = $('.sidebar');
    $sidebar.hide();
    $sidebar.css();
}

*使用链式调用时,将点"."放在前面,强调这是方法调用而不是新语句

//bad
$('#items').
  find('.selected').
  highlight().
  end().
  find('.open').
  updateCount();
//good
$('#items')
  .find('.selected')
  .highlight()
  .end()
  .find('.open')
  .updateCount();

JavaScript Style Guide中文总结的更多相关文章

  1. electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google JavaScript Style Guide代码规范

    我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google ...

  2. Airbnb JavaScript Style Guide

      Airbnb JavaScript Style Guide() { 用更合理的方式写 JavaScript    ES5 的编码规范请查看版本一,版本二. 翻译自 Airbnb JavaScrip ...

  3. Google JavaScript Style Guide

    转自:http://google.github.io/styleguide/javascriptguide.xml Google JavaScript Style Guide Revision 2.9 ...

  4. Google coding Style Guide : Google 编码风格/代码风格 手册/指南

    1 1 1 https://github.com/google/styleguide Google 编码风格/代码风格 手册/指南 Style guides for Google-originated ...

  5. 使用tdcss.js轻松制作自己的style guide

    http://jakobloekke.github.io/tdcss.js/ 在前端开发中,如果能够有一个style guide对于设计来说就显得专业稳定,一致性.在上述链接中,有一个tdcss.js ...

  6. Google HTML/CSS Style Guide

    转自: http://google.github.io/styleguide/htmlcssguide.xml Google HTML/CSS Style Guide Revision 2.23 Ea ...

  7. [Guide]Google C++ Style Guide

    0.0 扉页 项目主页 Google Style Guide Google 开源项目风格指南 -中文版 0.1 译者前言 Google 经常会发布一些开源项目, 意味着会接受来自其他代码贡献者的代码. ...

  8. Google C++ Style Guide

    Background C++ is one of the main development languages used by many of Google's open-source project ...

  9. 与你相遇好幸运,The Moe Node.js Code Style Guide

    The Moe Node.js Code Style Guide  By 一个最萌的开发者 @2016.9.21 >>代码是人来阅读的,格式规范的代码是对编程人员最好的礼物 :) > ...

随机推荐

  1. Xcode8.3 添加iOS10.3以下旧版本模拟器

    问题起源 由于手边项目需要适配到iOS7, 但是手边的测试机都被更新到最新版本,所以有些潜在的bug,更不发现不了.最近就是有个用户提出一个bug,而且是致命的,app直接闪退.app闪退,最常见的无 ...

  2. MySQL5.7下修改root密码

    本地安装了个mysql5.7,发现修改root密码和以往有区别了,特此记录下 进入mysql  更改密码: mysql> update mysql.user set authentication ...

  3. 使用NPOI生成Excel级联列表

    目录 1    概要    1 2    磨刀不误砍柴工——先学会Excel中的操作    2 3    利用NPOI生成导入模板    7 3.1    设置workbook&sheet   ...

  4. Linux--管道pipe

    管道是一种最基本的IPC机制,由pipe函数创建:#include <unistd.h>
int pipe(int filedes[2]); 调用pipe函数时在内核中开辟一块缓冲区(称为 ...

  5. linux重要的守护进程

    重要的守护进程 守护进程(Daemon)通常会随系统启动时激活并随系统关闭时停止,一直在系统后台中默默为用户提供服务: 守护进程名称 用处 crond 计划任务 dhcpd 动态IP地址分配服务(DH ...

  6. 【WPF】学习笔记(一)——做一个简单的电子签名板

    参加实习(WPF)已经有两个多周的时间了,踩了一些坑,也算积累了一些小东西,准备慢慢拿出来分享一下.(●'◡'●) 这次呢就讲讲一个简单的电子签名板的实现. 先上张图(PS:字写得比较丑,不要太在意哈 ...

  7. 使用Spigot搭建MineCraft服务器

    MineCraft 这种游戏还是人多了好玩,以前的服务器放在同学的Windows电脑上,每次我们想玩的时候就让让去打开,但是总是有一些原因,想玩的时候服务器没开着,不想玩的时候服务器空开着费电.昨天一 ...

  8. scrapy(一)建立一个scrapy项目

    本项目实现了获取stack overflow的问题,语言使用python,框架scrapy框架,选取mongoDB作为持久化数据库,redis做为数据缓存 项目源码可以参考我的github:https ...

  9. Layui的一点小理解(上)

    首先声明这是个人的一点理解,如有不对之处请指正,以下的例子有在官网上看到的,有的是自己写的.还是老规矩最后会附上官网的,如有不明白之处,请查看文档或留言. 既然说Layui,当然要简单的介绍以下什么是 ...

  10. SMP-1

    项目:该项目是用web做一个捐款的管理系统. 目标:可以记录接受捐款和资助捐款的信息,可以查询捐款等. 计划时间:2016-01-01至2016-01-15 实际用时:2016-01-08至2016- ...