You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于sumUpNumbers函数中match的||[]与a+ +b语法的技术问询

嘿,我来帮你把这个函数里的两个疑惑点掰扯清楚,都是JS里很实用的小技巧哦!

1. (inputString.match(/\d+/g)||[]) 里的 [] 到底干嘛用?

首先得回忆下 String.match() 方法的行为:当它用正则匹配字符串时,如果找到匹配项,会返回包含匹配结果的数组;但如果完全没匹配到任何数字,它会返回 null。

而数组的 reduce() 方法只能在数组上调用,如果直接给 null 调用 reduce(),浏览器会直接抛出 TypeError: Cannot read properties of null (reading 'reduce') 这种错误。

所以这里的 || [] 就是个兜底操作:如果 match() 返回了 null(也就是没找到数字),就用空数组 [] 来代替它。这样不管有没有匹配到数字,我们都能安全地调用 reduce()——空数组调用 reduce 时,因为没有元素需要遍历,会直接返回你传入的初始值(这里是0),不会报错。

就像你说的:

  • 传入 "123450" 时,match() 返回 ["123450"],|| [] 还是 ["123450"],正常执行累加;
  • 传入 "how are you" 时,match() 返回 null,null || [] 就变成了 [],reduce 直接返回初始值0,不会炸锅。
2. a+ +b 这写法看着有点怪,到底啥意思?

这个其实是把字符串转成数字再相加的简洁写法,拆解一下就懂了:

  • match() 返回的数组里的元素都是字符串类型的数字(比如 "123450"),如果直接用 a + b,那就是字符串拼接,结果会变成 "0123450" 这种奇怪的东西,完全不是我们要的数字求和。
  • 这里的 +b 是一元加号运算符,它的作用是把字符串(或者其他能转成数字的类型)转换成纯数字,效果和 Number(b) 一模一样。
  • 所以 a+ +b 其实等价于 a + (+b),也就是把字符串 b 转成数字后,再和累加值 a 做数字加法。

举个例子,第一次执行 reduce 时,a 是初始值0,b 是 "123450",+b 变成123450,0 + 123450 就得到了正确的累加结果。

内容的提问来源于stack exchange,提问作者Airas Yaqub

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:29:32