1. 变量声明
// 建议使用 let 和 const ;不要使用 var// badvar a = 1;// goodlet a = 1;// let 声明一般变量,const 声明常量,// 常量命名时使用全大写,单词直接用下短线 【_】 链接const PI = 3.14const CONSTANT_DATA = 10// 多个变量声明时// badlet a, b, c;// goodlet a;let b;let c;
2. 变量声明时,建议写清变量类型
// badlet a = null;// goodlet a = [];
3. if… else… 和 switch
// 在判断逻辑中判断条件属于同一类型时,活用 switch 代替 if else// badif (value = 'a') { ...} else if (value = 'b') { ...} else if (value = 'c') { ...} ...// goodswitch (value) { case 'a': ... case 'b': ... case 'c': ... ...}
4. 获取 dom 结点后如果重复使用,将获取 dom 操作用变量保存
// baddocument.getElementById('id').style.color = 'white';document.getElementById('id').style.background = 'white';// goodlet elm = document.getElementById('id');elm.style.color = 'white';elm.style.background = 'white';
5. 定时器函数的必要清除 (setInterval setTimeout)
// badsetInterval(() => { ...}, 1000)// goodlet timer = null...if (timer != null) { clearInterval(timer); timer = null}timer = setInterval(() => { ...}, 1000)
6. 对象的属性和方法,尽量采用简洁表达法,这样易于描述和书写
var ref = 'some value';// badconst atom = { ref: ref, value: 1, addValue: function (value) { return atom.value + value; },};// goodconst atom = { ref, value: 1, addValue(value) { return atom.value + value; },};
7. 使用默认值语法设置函数参数的默认值
// badfunction handleThings(opts) { opts = opts || {};}// goodfunction handleThings(opts = {}) { // ...}
8. 静态字符串一律使用单引号或反引号,不使用双引号。动态字符串使用反引号
// badconst a = "foobar";const b = 'foo' + a + 'bar';// acceptableconst c = `foobar`;// goodconst a = 'foobar';const b = `foo${a}bar`;
9. async/await 在循环中的使用
// errorconst fn = () => { forEach(async (item) => { ... await doSomething() ... })} // successconst fn = async () => { for (let i = 0; i< length; i++) { ... await doSomething() ... }} // 在for...of 和 while 循环中可以正常使用// 如果你想连续执行await调用,请使用for循环(或任何没有回调的循环)// 永远不要和forEach一起使用await,而是使用for循环(或任何没有回调的循环)
10. 代码中对于变量的值要做必要校验避免出现 unexpected bug
csnyValidator = (rule, val, callback) => { try { const { getFieldValue } = this.props.form // 这里要做以下校验 确保 val 是有意义的值再进行下面的逻辑 if (typeof val !== 'undefined') { const timeDiff = moment().valueOf() - val.valueOf() if ( timeDiff / (1000 * 3600 * 24 * 365) < 18 || timeDiff / (1000 * 3600 * 24 * 365) > 60 ) { if (getFieldValue('zjlx') !== '01') { callback('出生年月应在18-60岁之间!') } callback() } callback() } else { callback() } } catch (err) { console.log('errrrrrrrr', err) callback() } }// 备注:在使用 ant.design 中表单组件时,其中集成了表单的校验处理;在使用自定义校验规则 validator 时,// callback 必须被调用// callback 必须被调用// callback 必须被调用