无法获取未定义或空引用的属性“length”

4
我有以下的代码 - 它只是获取文本框中的值,对字符串执行正则表达式,然后计算字符串值中有多少个星号:
var textBoxValue = $(textbox).val();

function countHowManyWildCards(stringToSearch) {

    var regex = new RegExp(/\*/g);
    var count = stringToSearch.toString().match(regex).length;
    return count;

}

if (countHowManyWildCards(textBoxValue) > 1) {

//Other code
}

代码似乎可以正常工作,但是出现了一个错误:

stringToSearch.toString().match(regex).length;

错误信息如下:

无法获取未定义或空引用的 'length' 属性

但是我不清楚为什么代码可以运行,但仍然出现这个错误?有人能告诉我发生了什么吗?

1
.match 表示它返回__一个包含匹配结果的数组,如果没有匹配,则返回 null.__ 因此在访问长度之前应该检查它是否为 null - fuyushimoya
3个回答

7

由于match失败并没有返回任何数组,因此调用.length会引发错误。

要解决这个问题,可以使用以下方法:

var count = (stringToSearch.match(regex) || []).length;

处理match失败的情况。当匹配失败时,|| []将返回一个空数组,而[].length将得到0


1

1
如果 stringToSearch 不包含任何 '*',则 stringToSearch.toString().match(regex) 将返回 null。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接