我劝你不要乱写三元表达式,你看看这容易读懂吗

代码是写给人看的,不是写给机器看的,机器只喜欢01,你会写01吗?
发现别的同事写的一段代码,实在是难以理解,如下:

1
2
3
4
5
6
7
8
9
10
item.renewalStartDate =
item.orderStatus == 2
? item.payType == 3
? item.auditDate
? dayjs(item.auditDate).format('YYYY-MM-DD')
: ''
: item.payDate
? dayjs(item.payDate).format('YYYY-MM-DD')
: ''
: '';

你看看上面这段代码,它容易读懂吗?真是服了,写的啥啊?
给上面的代码加一下小括号,应该可以协助理解,经过仔细研究,改写成这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
item.renewalStartDate =
item.orderStatus == 2
?
(item.payType == 3 // ----------------------------第2层三元表达式
?
(
item.auditDate // ----第3层三元表达式,这是一个小三元表达式
? dayjs(item.auditDate).format('YYYY-MM-DD')
: ''
)
:
(
item.payDate // ----第3层第2个三元表达式
? dayjs(item.payDate).format('YYYY-MM-DD')
: ''
)
) //---------------------------------------------2 end
: '';

因为三元表达式的问好和冒号冒号都是成对出现的,可以改写。但是嵌套起来真的不好阅读。
其实不如写成if else的形式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
let res = ''
if(item.orderStatus == 2){
if(item.payType == 3){
if(item.auditDate){
res = dayjs(item.auditDate).format('YYYY-MM-DD')
} else {
res = ''
}
} else {
if(item.payDate){
res = dayjs(item.payDate).format('YYYY-MM-DD')
} else {
res = ''
}
}
} else {
res = ''
}
item.renewalStartDate = res

这样是不是清晰易懂了呢。不知道是我的阅读能力的问题,还是原先的代码写的太骚。