2空格缩进
使用 2 个空格而不是 tab 来进行代码缩进,同时绝对不要混用空格和 tab 。
Sublime Text 2 设置(perfernces > Settings - User): "tab_size": 2, "translate_tabs_to_spaces": true
换行
使用 UNIX 风格的换行符 (\n),同时在每个文件的结尾添加一个换行符。 Windows 风格的换行符 (\r\n) 是绝对禁止出现在任何项目中的。 Sublime Text 2 设置(perfernces > Settings - User): "default_line_ending": "unix"
去除行末尾的多余空格
就像吃完饭要刷牙一样,在提交 (commit) 代码之前你需要清理掉所有的不必要的空格。
Sublime Text2 设置(perfernces > Settings - User): "trim_trailing_white_space_on_save": true
使用分号
是否使用分号,在社区争论已久。 isaac 也写过一篇讨论的文章, 但是,当可以用廉价的语法来消除一些可能引入的错误的时候,请当一个保守派。
每行 80 个字符
限制你每行代码不超过 80 个字符。尽管现在的显示器越来越大,但是你的大脑并没有变大,并且你还可以把你的大显示器切分成多屏来显示。
Sublime Text 2 设置(perfernces > Settings - User): "rulers": [80] 多屏:view > Layout > Columns 2
使用单引号
除非编写.json 文件,其他时候都请用单引号包裹字符串。
Right: var foo = 'bar'; Wrong: var foo = "bar";
大括号位置
请把你的所有的左大括号都放在语句开始的这一行。
Right: if (true) { console.log('winning'); } Wrong: if (true) { console.log('losing'); }
同时,请注意在条件判断前后都添加一个空格。
变量、属性和函数名都采用小驼峰
变量、属性和函数的命名风格都需要遵循小驼峰风格。 同时所有的命名都是有意义的。 尽量避免用单字符变量和少见单词来命名。
Right: var adminUser = db.query('SELECT * FROM users ...'); Wrong: var admin_user = db.query('SELECT * FROM users ...'); var a = db.query('SELECT * FROM users ...');
类名采用大驼峰
类名都采用大驼峰风格来命名。
Right: function BankAccount() { } Wrong: function bank_Account() { }
用大写来标识常量
常量变量和对象的静态常量属性都需要特殊表明,通过全部大写的方式来表明。
尽管 Node.js / V8 支持 mozilla 的 const 关键字, 但是不幸的是,对象的属性并不支持这个关键字,而且 const 没有包含于任何一个 ECMA 规范中。
Right: var SECOND = 1 * 1000; function File() { } File.FULL_PERMISSIONS = 0777; Wrong: const SECOND = 1 * 1000; function File() { } File.fullPermissions = 0777;
对象、数组的创建
使用尾随逗号,尽量用一行来声明,只有在编译器不接受的情况下才把对象的 key 用单引号包裹。 使用字面表达式,用 {}, [] 代替 new Array, new Object。
Right: var a = ['hello', 'world']; var b = { good: 'code', 'is generally': 'pretty', }; Wrong: var a = [ 'hello', 'world' ]; var b = {"good": 'code' , is generally: 'pretty' };
- 使用 === 比较符
写代码并不是在背这些 stupid rules 。使用 === 操作符来进行比较操作,它会完全按照你的期望来执行。
Right: var a = 0; if (a === '') { console.log('winning'); } Wrong: var a = 0; if (a == '') { console.log('losing'); }
三元操作符不应该写在一行,将它分割到多行。
Right: var foo = (a === b) ? 1 : 2; Wrong: var foo = (a === b) ? 1 : 2;
使用有意义的判断条件
所有复杂的条件判断都需要赋予一个有意义的名字或者方法。
Right: var isValidPassword = password.length >= 4 && /^(?=.*\d).{4,}$/.test(password); if (isValidPassword) { console.log('winning'); } Wrong: if (password.length >= 4 && /^(?=.*\d).{4,}$/.test(password)) { console.log('losing'); }
尽早的从函数中返回
为了避免深入嵌套的 if 语句,请尽早的从函数中返回。
Right: function isPercentage(val) { if (val < 0) { return false; } if (val > 100) { return false; } return true; } Wrong: function isPercentage(val) { if (val >= 0) { if (val < 100) { return true; } else { return false; } } else { return false; } } 针对这个示例,甚至可以进一步精简优化: function isPercentage(val) { var isInRange = (val >= 0 && val <= 100); return isInRange; }
使用单行注释风格
不管是单行注释还是多行注释,都使用 // 。 同时请尝试在更高层次来编写注释(解释函数整体的思路), 只在解释一些难以理解代码的时候添加注释,而不是给一些琐碎的东西加上注释。
文件命名
单词之间使用 _ underscore 来分割,如果你不想暴露某个文件给用户,你也可以用 _ 来开头
Right: child_process.js string_decoder.js _linklist.js Wrong: childProcess.js stringDecoder.js
空格
在所有的操作符前后都添加空格,function 关键字后面添加空格
Right: var add = function (a, b) { return a + b; }; Wrong: var add=function(a,b){ return a+b; }