JavaScript Style Guide中文总结
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中文总结的更多相关文章
- electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google JavaScript Style Guide代码规范
我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google ...
- Airbnb JavaScript Style Guide
Airbnb JavaScript Style Guide() { 用更合理的方式写 JavaScript ES5 的编码规范请查看版本一,版本二. 翻译自 Airbnb JavaScrip ...
- Google JavaScript Style Guide
转自:http://google.github.io/styleguide/javascriptguide.xml Google JavaScript Style Guide Revision 2.9 ...
- Google coding Style Guide : Google 编码风格/代码风格 手册/指南
1 1 1 https://github.com/google/styleguide Google 编码风格/代码风格 手册/指南 Style guides for Google-originated ...
- 使用tdcss.js轻松制作自己的style guide
http://jakobloekke.github.io/tdcss.js/ 在前端开发中,如果能够有一个style guide对于设计来说就显得专业稳定,一致性.在上述链接中,有一个tdcss.js ...
- Google HTML/CSS Style Guide
转自: http://google.github.io/styleguide/htmlcssguide.xml Google HTML/CSS Style Guide Revision 2.23 Ea ...
- [Guide]Google C++ Style Guide
0.0 扉页 项目主页 Google Style Guide Google 开源项目风格指南 -中文版 0.1 译者前言 Google 经常会发布一些开源项目, 意味着会接受来自其他代码贡献者的代码. ...
- Google C++ Style Guide
Background C++ is one of the main development languages used by many of Google's open-source project ...
- 与你相遇好幸运,The Moe Node.js Code Style Guide
The Moe Node.js Code Style Guide By 一个最萌的开发者 @2016.9.21 >>代码是人来阅读的,格式规范的代码是对编程人员最好的礼物 :) > ...
随机推荐
- 这个demo是为解决IQKeyboardManager和Masonry同时使用时,导航栏上移和make.right失效的问题
原文链接在我的个人博客主页 (一).引言: 在 IQKeyboardManager 和 Masonry 同时使用时,导航栏上移和make.right失效等问题多多. 其实我们完美的效果应该是这样的:* ...
- Java在Debug的时候,有些变量能无限展开(循环了)?
抛异常的时候,Java Debug 时,有些变量能无限展开,怎么做到的? 先来一个报错的例子: Exception in thread "main" java.lang.Stack ...
- 浅谈echo、print、var_dump()、print_r()的区别
1.echo 和 print 的区别 共同点:首先echo 和 print 都不是严格意义上的函数,他们都是语言结构;他们都只能输出 字符串,整型跟int型浮点型数据.不能打印复合型和资源型数据: 而 ...
- Unity C# 多态 委托 事件 匿名委托 Lambda表达式 观察者模式 .NET 框架中的委托和事件
一.多态 里氏替换原则: 任何能用基类的地方,可以用子类代替,反过来不行.子类能够在基类的基础上增加新的行为.面向对象设计的基本原则之一. 开放封闭原则: 对扩展开放,意味着有新的需求或变化时,可以对 ...
- HashMap 构造函数
HashMap总共提供了三个构造函数 /** * Constructs an empty <tt>HashMap</tt> with the default initial c ...
- DirectFB学习笔记四
本篇目的,实现按钮的点击事件捕获,也就是鼠标点击,如果点击在方框范围内,则响应,在方框外,则忽略. 由于鼠标移动和点击都会产生事件,因此,我们可以在鼠标移动的时候记录坐标,在点击时比较坐标是否在方框范 ...
- office web apps 部署-搭建域控服务器
开始第一条先说注意事项:我所配置的环境是用了三台2012server虚拟机,三台虚拟机必须要加下域控,而且登录操作的时候必须以域账号登录,否则测试不通过!在笔记本上搭建了两个虚拟机(window se ...
- selenium IDE的3种下载安装方式
第一种方式: 打开firefox浏览器-----点击右上角-----附加组件----插件----搜索框输入“selenium”-----搜索的结果中下拉到页面尾部,点击“查看全部的37项结果”---进 ...
- 与64位版本的Windows不兼容,masm运行不了
问题: 在Window64位运行不了的masm 解决方法: 1.下载DosBox0.74(当前最新): 2.安装后运行,运行后出现控制台: 3.在DosBox的控制台下运行 Mount x: x:/m ...
- SDN学习之OpenFlow协议分析
学习SDN相关的学习也已经有快半年了,期间从一无所知到懵懵懂懂,再到现在的有所熟悉,经历了许多,也走了不少弯路,其中,最为忌讳的便是,我在学习过程中,尚未搞明白OpenFlow协议的情况下,便开始对S ...