可否简化JavaScript中判断show变量是否未定义后取反的代码?
结论
完全可以简化,以下几种方案都和原有代码逻辑完全等价,兼容你给出的所有调用效果。
简化方案
方案1:替换typeof判断为直接值对比(最稳妥,无兼容性问题)
原代码的typeof show == 'undefined'判断可以直接简化为和undefined直接对比,代码更短可读性更好:
show = show === undefined ? undefined : !show
这个写法和原逻辑100%一致,包括用户显式传入undefined的场景也完全兼容。
方案2:合并到toggleClass调用,省略单独赋值步骤
如果你不需要后续再使用show变量,可以直接把逻辑写在toggleClass的参数里,删掉单独的赋值行,代码更精简:
// 删掉原来的show赋值行,直接写下面这行即可 $(el).toggleClass('d-none', show === undefined ? undefined : !show)
方案3:用arguments判断(更简短,适合确定不会显式传undefined的场景)
如果你的业务场景里不会出现用户显式传入undefined的情况,可以用arguments判断是否传参,代码更短:
show = arguments.length ? !show : undefined
注意:如果调用时存在显式传入
undefined的情况(即myToggle(undefined)),该写法和原逻辑不等价,原逻辑会返回undefined,该写法则会返回!undefined即true,请根据业务场景选择。
效果验证
以上所有方案都完全兼容你给出的调用效果:
myToggle():第二个参数传undefined,jQuery自动执行类的切换逻辑myToggle(1):参数取反后为false,移除d-none类myToggle(0):参数取反后为true,添加d-none类
内容的提问来源于stack exchange,提问作者Coisox
相关产品推荐
相关产品推荐

