JavaScript中如何更优雅地编写带返回值的if语句
三元运算符精简失败的核心原因
写不出和原逻辑一致的三元实现,本质是没对齐原函数的隐式行为:原函数仅在入参严格等于0时返回0,严格等于1时返回1,其余所有入参场景都不会命中分支,隐式返回undefined。绝大多数精简错误都是给非0/1的入参额外加了返回值,或是把严格判断写成了宽松判断,导致运行结果偏差。
1:1对齐原逻辑的精简实现
用嵌套三元运算符可以在不改变任何行为的前提下大幅压缩代码,写法如下:
const x = input => input === 0 ? 0 : input === 1 ? 1 : undefined;
跑原有的三个测试用例,结果和原代码完全一致:
x(5):返回undefinedx(1):返回1x(0):返回0
常见错误写法说明
- 漏写末尾的
undefined分支:虽然短三元input === 0 ? 0 : input ===1 ? 1在当前场景下运行结果看似一致,但这是表达式无匹配项时的默认计算结果,显式声明返回值才能保证逻辑完全可控,避免后续代码改动引入非预期行为 - 用宽松相等
==替代严格相等===:会导致入参为false、字符串'0'/'1'时误命中分支,和原逻辑的严格类型判断规则不符 - 错误设置兜底返回值:比如写成
input ===0 ? 0 : 1,会让入参为5时返回1,和原逻辑返回undefined的行为完全不一致
内容的提问来源于stack exchange,提问作者Ken Kurita
相关产品推荐
相关产品推荐

