基本格式
- 使用4个空格字符做为一个缩进层级,(记得配置编辑器)。
- 不要省略分号。
- 行的长度限定在80个字符。
- 长度超过限制时,选择在运算符以后换行,下一行须要两个层级的缩进。例外,变量赋值以及变量声明时,第二行应当和赋值运算符或第一个变量保持对齐。
- 适当的增长空行:
- 在方法以前。
- 在方法的局部变量和第一条语句之间。
- 在多行或单行注释以前。
- 在方法内的逻辑片断之间插入空行,提升可读性。
- 变量和函数命名,统一使用小驼峰式大小写,即首字母小写,后续每一个单词首字母都大写。对于构造函数,使用大驼峰式大小写。匈牙利命名,如sName表示字符串,iCount表示整数,不推荐使用。
- 推荐的命名方式
- 变量的命名应当是名词。
- 函数和方法的前缀应当是动词。
- 构造函数的命名应当是名词。
- 一些常见动词的约定:
动词 |
含义 |
can |
函数返回一个布尔值 |
has |
函数返回一个布尔值 |
is |
函数返回一个布尔值 |
get |
函数返回一个非布尔值 |
set |
函数用来保存一个值 |
- 常量,使用大写字母和下划线来命名,下划线用以分隔单词。
- 引号的使用,字符串,倾向于使用单引号,并始终保持这个风格。
- null 的使用场景为,指望是对象的变量,参数,返回值,把它看成对象的占位符。
- 变量在声明时即赋予初始值。undefined的问题见下:
jsvar b;
console.log(b) // undefined
console.log(typeof b); // 'undefined'
console.log(c) // 报错
console.log(typeof c) // 'undefined'
var a = {};
console.log(a.aaa) // undefined
console.log(typeof a.aaa); // 'undefined'
console.log(d.aaa) // 报错
console.log(typeof d.aaa); // 报错
- 对象和数组使用直接量进行定义。
jsvar obj = {
a: "a"
}
var arr = ["a","b","c"];
注释
-
单行注释数组
- 用来解释下一行代码。请在这行注释以前插入一个空行,且缩进层级和下一行代码保持一致。
- 在代码行尾部的注释。代码结束到注释之间至少由一个缩进。该行不要超过最大字符限制,若超过请放置于该行上方。
- 注释大段的代码。
-
多行注释浏览器
js/*
* 我是注释
* 另外一段注释
*/
- 与单行注释同样,注释以前有一个空行。
- 缩进与下一行代码一致。
-
使用注释编辑器
- 难以理解的代码
- 可能被误觉得错误的代码
- 浏览器特性Hack
语句和表达式
-
全部的块语句都应该使用花括号。函数
- if
- for
- while
- do...while...
- try...catch...finally
花括号的对齐规范code
js// 推荐
if(condition) {
doSomething();
} else {
doSomethingElse();
}
// 禁止,以避免致使错误的分号自动插入。
if (condition)
{
doSomething();
}
else
{
doSomethingElse();
}
-
块语句间隔,推荐使用Google JavaScript风格。对象
jsif(condition){
doSomething();
}
jsif (condition) {
doSomething();
}
jsif ( condition ) {
doSomething();
}
此处省略了switch for的使用规范ip
-
for-in 使用规范原型链
- for-in 循环必须使用
hasOwnProperty()
。
- 除非你要查找原型链,但必须补充注释。
- 不可用于遍历数组,数组必须使用for。
变量、函数和运算符
- js会将变量声明提早,所以在函数内部任意地方定义变量和在函数顶部定义变量是彻底同样的。
尤为是js没有块级做用域,需注意。推荐作法是,有意识地将声明提高到函数块的顶部来作。
- 函数声明一样也会被js提早。推荐作法是,先声明后使用。
- 不可在条件语句中使用函数声明。
- 严格模式,"use strict"; 不要将该指令写到全局中,而是写在函数块内。
- 始终使用 === 和 !== 。
- 禁止使用 eval() ,惟一例外:涉及到回调中解析JSON的情形。
- 禁止使用原始包装类型(String,Boolean,Number)