
编码规范
缩进
- 空格 or Tab缩进,建议 4 空格为1个缩进。
 - 空格、Tab勿混用
 - 换行缩进:12345678910111213141516// function 参数换行 结尾分号,前边8空格(2缩进)callAFunction(document, element, window, "some input string", true, 123,navigator);// 逻辑语句if (isLeapYear && isFebruary && day === 29 &&live) {happyBirthDay();}// 变量赋值 对齐let name = "z_j",email = "z_j@ctrip.com";// object 1缩进let book = {title: "HTML",author: "zs"}
 
空行
- 方法间
 - 赋值和方法间
 - 注释前
 - 方法内逻辑段落间
 
命名(驼峰式)
- 常量:大写 + 下划线 MAX_COUNT
 - 变量:前缀名字 myName :尽可能有意义,如果不好在字面体现含义,可加注释说明
 - 函数:前缀动词 getName, isEnable
 - 构造函数:大驼峰式 ApplicationList
 
null
(对象的占位符):返回 、判断
undefined
避免人为使用undefined
注释
写给他人、写给自己
if, for, while, do…while…, try…catch…finally
- 使用花括号
 - 风格
 
  | 
  | 
声明
- 一个逻辑块中,变量声明提到顶部,并且合并
 - 函数声明放在变量声明之后
 
函数
- 函数调用:doSomething(params) 无空格
 - 立即执行函数用一对括号包裹起来(其本质相当于语句)
 
严格模式
“use strict“ 不要放在全局作用域,可以放在立即执行函数中(加一层作用域)
检查点:
- 句尾分号
 - 单行长度(仿java规范,小于80字符)
 - === or !==
 - “” or ‘’ 统一,可以设立默认约定为“”双引号
 
实践规范
解耦
- 三元组解耦 - JS-HTML(事件绑定、JS外置、Template),CSS-HTML(CSS外置)
 - 无耦合 NO Impossible
 
避免使用全局变量(作用域污染)
- 函数内部不使用外部变量,以参数传入
 - 单全局变量:类库 JQuery $
 - 零全局变量:立即执行函数1234(function(win) {let doc = win.document;// other code}(window));
 
事件处理
- 隔离应用逻辑和用户行为
 - 最小需要
 
  | 
  | 
值检测:
- typeof :原始值检测
 - instanceof:引用值检测
 - in: 属性检测123456if ("name" in object) {// 逻辑}// errorif (object["name"]) {}
 
配置数据分离
- 常见配置数据: URL,重复的值,设置,展示给用户的值 (统一性)
 
  | 
  | 
- 储存:JSON、JS
 
抛错
- throw new Error(“message”)
 - try…catch
 
协作
- 不要随意更改(覆盖、新增、删除)非自己创建的对象,包含:原生对象(Object、Array等)、DOM、BOM、类库
 - 如果确实需要,请继承