Node.js v18.15.0中调用matchAll报错‘不是函数’的原因?
解决Node.js中
matchAll调用报错:TypeError: line.matchAll is not a function 问题根源
你触发报错的核心原因是代码里的语法错误:
line = leftOver.substring(idxStart, idx).toLowerCase;
这里的toLowerCase是字符串方法的引用,没有加括号调用,导致line变量存储的是一个函数,而非你预期的小写字符串。函数类型不存在matchAll方法,因此抛出类型错误。
修正方案
给toLowerCase添加括号,确保调用方法后返回字符串:
line = leftOver.substring(idxStart, idx).toLowerCase();
完整修正后的代码
const regex = /[a-zA-Z']{2,}/g; var leftOver = ''; var read, line, idxStart, idx; while((read = fs.readSync(fd, buf, 0, bufSize, null)) !== 0) { leftOver += buf.toString('utf-8', 0, read); idxStart = 0; while((idx = leftOver.indexOf("\n", idxStart)) !== -1) { // 修正:添加括号调用toLowerCase方法,返回小写字符串 line = leftOver.substring(idxStart, idx).toLowerCase(); let wordsInLine = line.matchAll(regex); for(const word of wordsInLine) { // 处理匹配到的单词逻辑 } idxStart = idx + 1; } leftOver = leftOver.substring(idxStart); }
注:你的Node.js v18.15.0版本完全支持matchAll,版本并非问题所在,仅需修正方法调用的语法即可。
内容的提问来源于stack exchange,提问作者Atreides
相关产品推荐
相关产品推荐

