关于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
相关产品推荐
相关产品推荐

