JavaScript多条件合并:如何简化重复等值检查代码?
精简多值判断的正确姿势
嘿,这个问题一点都不浅显——很多刚开始写JS的同学都会踩这种逻辑运算符的坑,太正常了!先给你拆解一下问题,再给你靠谱的精简方案:
为什么你的尝试写法有问题?
你写的:
if (this.myVeryLongName.aRandomProperty === ('property_1' || 'property_1' || 'property_1')) { //do something }
这里的('property_1' || 'property_1' || 'property_1')其实只会返回第一个为真的表达式,也就是第一个'property_1',所以这段代码等价于:
if (this.myVeryLongName.aRandomProperty === 'property_1') { //do something }
刚好你三个值都是property_1,功能暂时没差,但如果以后要判断不同的值(比如property_1、property_2、property_3),这种写法就完全失效了,逻辑会出错。
保持功能不变的精简写法
方案1:用数组includes方法(最直观推荐)
把要判断的所有值放进数组,然后用includes方法检查属性值是否在数组里:
if (['property_1', 'property_1', 'property_1'].includes(this.myVeryLongName.aRandomProperty)) { // do something }
如果以后要加不同的判断值,直接往数组里加就行,可读性超高。
方案2:先把长属性存为变量(适合属性名特别长的场景)
如果this.myVeryLongName.aRandomProperty这个写法重复写太麻烦,可以先把它赋值给一个短变量,再做判断:
const targetProp = this.myVeryLongName.aRandomProperty; if (targetProp === 'property_1' || targetProp === 'property_1' || targetProp === 'property_1') { // do something }
也可以结合includes进一步精简:
const targetProp = this.myVeryLongName.aRandomProperty; if (['property_1', 'property_1', 'property_1'].includes(targetProp)) { // do something }
另外猜你可能是笔误把三个判断值写成一样的了?如果实际是不同的值(比如property_1、property_2、property_3),上面的方案完全适用,只要把数组里的元素换成对应的值就好~
内容的提问来源于stack exchange,提问作者Leo Messi
相关产品推荐
相关产品推荐

