开发者问题收集

未捕获的类型错误:无法读取 null 的属性(读取“长度”)但代码按预期工作

2022-12-06
1599

我试图让此代码工作

let itCompanies = ["Facebook", "Google", "Microsoft", "Apple", "IBM", "Oracle", "Amazon"];

let oInCompany = itCompanies.forEach((element) => { 
var theElement = element.match(/o/gi); 
if (theElement.length > 1) { return console.log(element); 
 } 
});

// the result is code returning the element name into console

代码按预期工作,但显示错误。

Uncaught TypeError: Cannot read properties of null (reading 'length')
    at main.js:53:18
    at Array.forEach (<anonymous>)
    at main.js:51:30

这是否意味着 .length 为空?但代码按预期工作。

我只需要对错误进行解释,是我的语法还是什么?

我不明白它是什么,同时我的代码运行良好。将来是否有可能在某个地方出错?

3个回答

正则表达式 /o/gi 在 itCompanies 数组的字符串中查找字母“o”,但该数组中没有一个字符串包含多个“o”。因此,String.match() 方法返回 null,这会导致错误,要处理 null,您可以使用以下方法:

let itCompanies = ["Facebook", "Google", "Microsoft", "Apple", "IBM", "Oracle", "Amazon"];
    
    let oInCompany = itCompanies.forEach((element) => { 
      var theElement = element.match(/o/gi); 
      if (theElement && theElement.length > 1) {
        return console.log(element); 
      } 
    });
Anass Kartit
2022-12-06

string.prototype.match 如果找不到匹配,则可以返回null。请参阅 mdn mdn> mdn mdn mdn mdn 。

绝对应该考虑匹配数组为null。

chrisg86
2022-12-06

发生这种情况的原因是,有些单词中没有匹配项。如果没有任何匹配项,则匹配选择器将返回 null。

您可以在此处查看更多信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match

当返回值为 null 时,您将获得 null.length。但 null 中没有属性 length。然后触发上述错误。

像这样更改您的代码,它将正常工作:

let itCompanies = ["Facebook", "Google", "Microsoft", "Apple", "IBM", "Oracle", "Amazon"];

let oInCompany = itCompanies.forEach((element) => { 
var theElement = element.match(/o/gi); 
if (theElement && theElement.length > 1) { return console.log(element); 
 } 
});
dbonev
2022-12-06