未捕获的类型错误:无法读取 null 的属性“toString”
2016-09-06
31129
运行以下代码时,我收到以下消息:“未捕获 TypeError:无法读取 null 的属性‘toString’”。由于我不熟悉 Javascript,因此任何帮助都将不胜感激
提前谢谢您。
function getUrlVars() {
var arrGamePath = document.referrer;
if(arrGamePath) {
var reg = new RegExp("[/][a-zA-Z]{2}-[a-zA-Z]{2,4}[/]");
var locale = reg.exec(arrGamePath) .toString();
while (locale.indexOf("/") != -1) {
locale = locale.replace("/", "");
}
return locale;
}else{
return false;
}
}
if(getUrlVars()) {
sCID = getUrlVars();
}
2个回答
您的正则表达式不匹配,因此返回
null
。
null
没有方法
toString()
。因此,您应该先检查是否匹配,如果不匹配,则返回
false
(或者执行任何其他您想执行的操作 - 或者更改您的正则表达式以使其匹配)
function getUrlVars() {
var arrGamePath = document.referrer;
if(arrGamePath) {
var reg = new RegExp("[/][a-zA-Z]{2}-[a-zA-Z]{2,4}[/]");
var matches = reg.exec(arrGamePath);
if (!matches) return false;
var locale = matches.toString();
while (locale.indexOf("/") != -1) {
locale = locale.replace("/", "");
}
return locale;
}else{
return false;
}
}
if(typeof getUrlVars == 'function') {
sCID = getUrlVars();
}
此外,您调用了两次该函数,一次在您的
if
行中,忽略结果:
if (getUrlVars())
然后,如果
if
返回 true,则再次调用。只需检查其类型是否为函数即可。
baao
2016-09-06
因此,此错误与 null 属性有关,虽然您没有声明
null
属性,但正如 @baao 在第一个答案中所分享的那样,这就是您所得到的。
因此,每当您尝试在 JavaScript 中访问值为 null 或 undefined 的属性并尝试读取任何属性、在其上调用任何函数时,您都会收到一条错误消息:无法读取 null 的属性,读取 toString(),所以这就是幕后发生的事情,这就是您收到错误的原因。
您正在尝试在
matches
上调用
toString()
,而它当前为
null
或曾经是
null
。
在现代 TypeScript 世界中,您可能可以像这样解决这个问题:
const reg: null || string = new RegExp("[/][a-zA-Z]{2}-[a-zA-Z]{2,4}[/]");
这可能表明,嘿,这个
reg
变量要么是字符串,要么可能是空的。
Daniel
2022-05-30