1. 变量声明
// 建议使用 let 和 const ;不要使用 var
// bad
var a = 1;
// good
let a = 1;
// let 声明一般变量,const 声明常量,
// 常量命名时使用全大写,单词直接用下短线 【_】 链接
const PI = 3.14
const CONSTANT_DATA = 10
// 多个变量声明时
// bad
let a, b, c;
// good
let a;
let b;
let c;
2. 变量声明时,建议写清变量类型
// bad
let a = null;
// good
let a = [];
3. if… else… 和 switch
// 在判断逻辑中判断条件属于同一类型时,活用 switch 代替 if else
// bad
if (value = 'a') {
...
} else if (value = 'b') {
...
} else if (value = 'c') {
...
}
...
// good
switch (value) {
case 'a':
...
case 'b':
...
case 'c':
...
...
}
4. 获取 dom 结点后如果重复使用,将获取 dom 操作用变量保存
// bad
document.getElementById('id').style.color = 'white';
document.getElementById('id').style.background = 'white';
// good
let elm = document.getElementById('id');
elm.style.color = 'white';
elm.style.background = 'white';
5. 定时器函数的必要清除 (setInterval setTimeout)
// bad
setInterval(() => {
...
}, 1000)
// good
let timer = null
...
if (timer != null) {
clearInterval(timer);
timer = null
}
timer = setInterval(() => {
...
}, 1000)
6. 对象的属性和方法,尽量采用简洁表达法,这样易于描述和书写
var ref = 'some value';
// bad
const atom = {
ref: ref,
value: 1,
addValue: function (value) {
return atom.value + value;
},
};
// good
const atom = {
ref,
value: 1,
addValue(value) {
return atom.value + value;
},
};
7. 使用默认值语法设置函数参数的默认值
// bad
function handleThings(opts) {
opts = opts || {};
}
// good
function handleThings(opts = {}) {
// ...
}
8. 静态字符串一律使用单引号或反引号,不使用双引号。动态字符串使用反引号
// bad
const a = "foobar";
const b = 'foo' + a + 'bar';
// acceptable
const c = `foobar`;
// good
const a = 'foobar';
const b = `foo${a}bar`;
9. async/await 在循环中的使用
// error
const fn = () => {
forEach(async (item) => {
...
await doSomething()
...
})
}
// success
const 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 必须被调用