逻辑运算符||与三元运算符公用产生的bug

90 阅读1分钟

问题的起因要从测试回归说起,好好地项目,测试突然过来说传参不对,无论选list的哪一项,都只会固定传第一项的no值,听上去像是代码写死了取值,赶紧跑去看代码!

乍一看!并没有问题啊(此处使用示例代码,非源码)

// b就是要传的参数

var terminalNum = '123456'
var posList = [
    {terminalNo: '111111'},
    {terminalNo: '222222'}
]
var b = terminalNum || posList.length ? posList[0]?.terminalNo : ''

可能很多小伙伴和我想的一样:逻辑||运算符前边的值,如果存在就直接取值,如果不存在走后边的三元运算逻辑,看上去一点问题没有啊❓‼️

但是事实并非如此!

这上边的代码中,默认会把三元运算符前边的内容作为初始条件去使用,此处逻辑也就变成了terminalNum || posList.length其中只要有一个条件为true,那么就会取数组的第一项的值,否则就会为空。

这也就解释了,为什么terminalNum明明有值,却还是取了数组的第一项值。

此处,如果想正常使用,处理也很简单,将后边的三元运算加个括号即可:

// b就是要传的参数

var terminalNum = '123456'
var posList = [
    {terminalNo: '111111'},
    {terminalNo: '222222'}
]
var b = terminalNum || (posList.length ? posList[0]?.terminalNo : '')

此处,也感谢掘金和群里的各位大佬提供思路,帮助小弟快速解决了问题~~~