编码规范
缩进
- 空格 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、类库
- 如果确实需要,请继承