闽公网安备 35020302035485号
// bad 三元嵌套三元不利于可读性
let message = (age < 3) ? 'Hi, baby!' :
(age < 80) ? 'Hello!' :
'What an unusual age!';
// 堆代码 duidaima.com
// good
if (age < 3) {
message = 'Hi, baby!';
} else if (age < 80) {
message = 'Hello!';
} else {
message = 'What an unusual age!';
}
// bad
if (company == 'Netscape') {
return true;
} else {
return false;
}
// good
return company === 'Netscape';
魔法值的问题// 魔法值举例
if(flag === '5'){
.......
}
if (businessType === 101){
.......
}
通常会采用枚举类型来解决魔法值问题,由于JS中没有枚举类型,可以使用对象字面量的方式来模拟枚举,如下: const BusinessTypeEnum = {
SYSTEM: 0, // 系统
CRM: 1, // CRM
JXC: 2, // JXC
UNKNOWN: 404, // 未知对象类型
CUSTOMER_MANAGEMENT: 100, // 客户管理
CUSTOMER: 101, // 客户
CUSTOMER_FOCUS: 102, // 重点客户
CUSTOMER_DEAL: 103, // 成交客户
CUSTOMER_FOLLOW: 104, // 跟进客户
CUSTOMER_PUBLIC: 105 // 客户公海池
}
if (businessType === BusinessTypeEnum.CUSTOMER){
.......
}
采用枚举的另外一个好处,当某个值因为需求迭代需求变更时,我们只需要在枚举中将该值替换,并不需要在全局搜素替换。
如图,当一辆电车快速驶来,无论图上的人采取哪种选择,似乎都是错误的。但是,在程序中出现预期之外的错误必须要导致一个负面结果时,一定要选择代价最小的。
// before
if (step === 0) {
dialog.close()
} else {
dialog.show()
}
// after
if ([1, 2, 3].includes(step)) {
dialog.show()
} else {
dialog.close()
}
我们无法保证自己写的代码没有任何差错,但是我们可以提前考虑,万一发生预期之外的错误,我们要如何处理来让损失最低。
// 如果条件表达式后面跟的是返回值,建议使用三元运算,如下方的例子,就可以优先考虑使用三元运算
// good
a > b ? 1 : 2
// bad
if (a > b) {
return 1
} else {
return 2
}
// 其他复杂的分支代码,写成三元可能并不利于阅读,建议使用if语句,如下面的例子
// good
if (a > b && b !== 0) {
val = a + b
} else {
val = a - b
}
// bad
a > b && b !== 0 ? val = a + b : val = a - b
while和for该怎么选? let numArr = []
let i = 1
while (numArr.length < 10) {
if (i % 3 === 0 || i % 5 === ) {
numArr.push(i)
}
i++
}
while在某些场景下,可以代替递归函数。比如我们希望得到100以内的斐波那契数列: // 使用递归
function fib (prev = 0, next = 1) {
if (next < 100) {
return [next, ...fib(next, prev + next)]
}
return []
}
// 使用while
functon fib2 (n = 100) {
let prev = 0
let next = 1
let result = []
while (next < n) {
result.push(next)
const temp = prev
prev = next
next = next + temp
}
return result
}
上面的例子很难用for循环去实现,因为我们并不知道100以内存在多少个斐波那契数字,但知道终止条件是数字必须小于100,因此更适合用while循环来实现。再来说说递归和while,递归往往在代码量上来看是简洁的,但本质上它是一个N层的函数嵌套,所以直觉上不易理解,且耗性能(不考虑尾递归优化的前提下);while循环只有一层嵌套,所以直觉上更容易理解,且性能更优。这里并不是说递归不好,不推荐大家使用,一来性能并不是大家首先要考虑的问题,二来while只能在部分场景中来代替递归。