match函数匹配不到数字触发TypeError的问题咨询及解决尝试
解决JavaScript中match匹配失败时报错的问题
当使用match(/\d+/)匹配字符串中的数字时,如果字符串里没有数字,方法会返回null,直接访问[0]就会触发TypeError: Cannot read properties of null (reading '0')错误——你之前的写法错误在于先尝试读取[0]再判断,这时候已经触发报错了,根本走不到判断逻辑。
正确的处理方式
1. 先存结果再判断
先把match的结果存到变量里,避免重复调用正则匹配,再判断是否为null:
var x = 'CHQ'; var matchResult = x.match(/\d+/); var y = matchResult ? matchResult[0] : 0;
2. 使用可选链+空值合并运算符(ES2020+)
如果环境支持ES2020及以上,这种写法更简洁:
var x = 'CHQ'; var y = x.match(/\d+/ )?.[0] ?? 0;
?.是可选链,当左侧值为null/undefined时,直接返回undefined,不会继续访问[0]??是空值合并,只有左侧为null/undefined时才返回右侧的0
3. 简化的三元写法
也可以把判断和赋值写在一行,但要确保先判断match结果是否存在:
var x = 'CHQ'; var y = x.match(/\d+/) ? x.match(/\d+/)[0] : 0;
不过这种写法会调用两次match,性能不如第一种存变量的方式,推荐用第一种或第二种。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

