开发者问题收集

未捕获的类型错误:无法读取 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个回答

您的正则表达式不匹配,因此返回 nullnull 没有方法 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