语句规范
- 所有语句后面需要有";"(*)
- If、for、do、while 等所有循环体和判断体的执行语句部分都用“{}”括起来,尽量不要省略花括号(不强制,单行时可省略)。
- 禁止在 return 关键字及要返回的表达式之间换行(*)。
- 每行代码应少于 120 个字符,多于这个数量时,可考虑断行(不强制,一般不要过长)。
- 使用 tabs (空格字符) 设置为 2 个空格(*)。
运算符
- 使用严格的条件判断,用全等 === 代替 == , 用 !== 代替 != (不强制,视情况而定)。
- 对于 if 语句,布尔值使用简写,但是对于字符串和数字进行比较()。
 if (isValid) {},if (name !== “”) {}
 if (list && list.length > 0) {} ()
- 赋值操作符、比较操作符、算数操作符、逻辑操作符、位移操作符前后应当加空格(*)。
 const DOC_TITLE = “TENCENT-QQ”;
 let count = 6 + 5;
- 避免不必要的三目表达式(不强制)。
 // bad
 const foo = a ? a : b;
 const bar = c ? true : false;
 const baz = c ? false : true;
 // good
 const foo = a || b;
 const bar = !!c;
 const baz = !c;
类型转换(不强制)
- 字符类型,let count1 = String(count);
- 数字类型,let val = Number(inputValue);
- 布尔类型,let age = 0; let hasAge = !!age;
字符串
- 1.使用单引号 ‘’ 定义字符串(*)。
- 2.使用字符串模板代替字符串拼接(*)。
数组
- 1.使用字面语法创建数组,const arr = []; 不要使用 new Array (*)。
- 2.使用 Array#push 取代直接赋值来给数组添加项(*)。
- 3.使用数组展开方法 … 来拷贝数组(不强制)。
 let arr1 = [a: 1, b: 2];
 let arr2 = […arr1];
- 4.如果数组有多行,则在开始的时候换行,然后在结束的时候换行(*)。
对象
- 使用字面语法来创建对象,如 const ITEM = {}, 不要使用 new Object (*)。
- 对象的 key 和 value 相同时,使用属性值的缩写(*)。
 funciton getUserInfo (name,phone) {
 let userInfo = {
 name,
 phone
 };
 return userInfo;
 }
引用
- 使用 const 定义你的所有引用;避免使用 var(*)。
- 如果你必须重新赋值你的引用, 使用 let 代替 var(*)。
模块
- 不要使用通配符导入,import _ as Storage from “Storage”;(_)。
- 使用模块 (import/export)代替 require(*)。
- 引入同一文件的多个模块(大于等于 2)时,每个模块独占一行(*)。
 import {
 get,
 getSessionStorage
 } from “common/utils/storage”;
属性
- 使用常量访问属性时,使用点符号(*)。
 const LOGIN_FORM = { NAME: “Allen” }; // LOGIN_FORM.NAME ;
- 使用变量访问属性时,使用 []表示法(*)。
 let obj = { title: “Allen” }; // obj[“title”]
块
- 当有多行代码块的时候,使用大括号包裹(*)。
- 如果你使用的是 if 和 else 的多行代码块,则将 else 语句放在 if 块闭括号同一行的位置(*)。
 if () {
 //
 } else {
 //
 }
常量
- const 定义常量 (*)。
- 常量采用全大写;const URL = “www.baidu.com”(*)。
- 使用大写字母和下划线组合命名,const MAX_COUNT = 10; (*)。
- 某些作为不允许修改值的变量认为是常量,全部字母都大写。例如:COPYRIGHT,PI (*)。
变量
- 使用 let 来定义变量(*)。
- 把 const 声明的放在一起,把 let 声明的放在一起(*)。
 const LOGIN, TITLE = “Allen”;
 let user = “chenxy”, manager = “asan”;
- 变量名使用首字母小写,驼峰式命名,如 let maxCount = 10; let tableTitle = ‘loginTable’; (*)。
变量例外情况(不强制)
- 作用域不大临时变量可以简写,比如:str,num,bol,obj,fun,arr。
- 循环变量可以简写,比如:i,j,k 等。
- 对于 jQuery 对象的变量使用 $ 作为前缀。如 const $sidebar = $(“.sidebar”);
函数命名
- 禁止单字母的名字。如 function f() {} (*)。
- 如果有函数名,则参数后空一格,参数前不空格; 例:function getMenu() {};
- 如果无函数名,则参数前后各空一格,便:const getMenu = function () {};
- 函数参数后各空一格。如 function getMenu() {}
- 首字母小写,驼峰式命名,统一使用动词或者动词+名词形式; (*)。
 getVersion(),submitForm(),
 涉及返回逻辑值的函数可以使用 is,has,can,get,set,load,contains,should,show 等表示逻辑的词语代替动词,
 例如:isObject(),hasClass(),containsElment(),canRead()。
 函数方法常用的动词:
 get 获取/set 设置,
 add 增加/remove 删除
 create 创建/destory 移除
 start 启动/stop 停止
 open 打开/close 关闭,
 read 读取/write 写入
 load 载入/save 保存,
 create 创建/destroy 销毁
 begin 开始/end 结束,
 backup 备份/restore 恢复
 import 导入/export 导出,
 split 分割/merge 合并
 inject 注入/extract 提取,
 attach 附着/detach 脱离
 bind 绑定/separate 分离,
 view 查看/browse 浏览
 edit 编辑/modify 修改,
 select 选取/mark 标记
 copy 复制/paste 粘贴,
 undo 撤销/redo 重做
 insert 插入/delete 移除,
 add 加入/append 添加
 clean 清理/clear 清除,
 index 索引/sort 排序
 find 查找/search 搜索,
 increase 增加/decrease 减少
 play 播放/pause 暂停,
 launch 启动/run 运行
 compile 编译/execute 执行,
 debug 调试/trace 跟踪
 observe 观察/listen 监听,
 build 构建/publish 发布
 input 输入/output 输出,
 encode 编码/decode 解码
 encrypt 加密/decrypt 解密,
 compress 压缩/decompress 解压缩
 pack 打包/unpack 解包,
 parse 解析/emit 生成
 connect 连接/disconnect 断开,
 send 发送/receive 接收
 download 下载/upload 上传,
 refresh 刷新/synchronize 同步
 update 更新/revert 复原,
 lock 锁定/unlock 解锁
 check out 签出/check in 签入,
 submit 提交/commit 交付
 push 推/pull 拉,
 expand 展开/collapse 折叠
 begin 起始/end 结束,
 start 开始/finish 完成
 enter 进入/exit 退出,
 abort 放弃/quit 离开
 obsolete 废弃/depreciate 废旧,
 collect 收集/aggregate 聚集
注释
公共组件维护者需要在文件头部加上注释说明: (*)。
 /**
 *文件用途说明
 *作者姓名、联系方式
 *制作日期
 *_/
 大的模块注释方法 ( _ )。
 //================
 // 代码用途
 //================
 小的注释;
 //代码说明
 注释单独一行,不要在代码后的同一行内加注释,将单行注释放在需要注释的行的上方新行 ( * )。
 //姓名
 let name = “abc”;
 let name =”abc”; //姓名` X