未捕获:TypeError:无法读取 null 的属性“toString”
2021-08-01
6634
我是菜鸟,目前正在学习 JavaScript 中的正则表达式。我有一个函数,该函数应该从字符串中选择 0 到 9 之间的数字。只要搜索的变量包含字母或数字,该函数就可以正常工作,但是当输入空值时,它会给出以下错误:
未捕获:TypeError:无法读取 null 的属性“toString”
我该如何修复此问题?提前谢谢您。
这是代码:
var lause = "s0m3 p30pl3";
function tulostanumerot();
var numerot = /[0-9]/g;
var testi = numerot.test(0-9);
var setti = lause.match(numerot);
if (testi === true) {
console.log(setti.toString());
}
else {
console.log("Ei numeroita!");
};
3个回答
如果未找到匹配项,则
String.prototype.match()
返回
null
。
因此,您有两个选项可以处理此问题
-
检查
setti
是否具有真值,您可以像这样if(setti)
。 -
使用
可选链
(?.)
,例如setti?.toString()
,。
Harsh Saini
2021-08-01
关于您的代码的一些说明:
-
方法 test() 接受字符串参数,这导致此代码不正确
var testi = numerot.test(0-9);
-
代码不在函数
function tulostanumerot();
内
-
您可以完全省略
testi
,而只使用setti
-
请注意 match() 返回数组或 null,因此您可以使用
if (setti) {{
而不是检查是否为 true
代码可能看起来像
function tulostanumerot() {
var numerot = /[0-9]/g;
var setti = lause.match(numerot);
if (setti) {
console.log(setti.toString());
} else {
console.log("Ei numeroita!");
}
}
tulostanumerot();
function tulostanumerot(lause) {
var numerot = /[0-9]/g;
var setti = lause.match(numerot);
if (setti) {
console.log(setti.toString());
} else {
console.log("Ei numeroita!");
}
}
[
"s0m3 p30pl3",
"",
"test"
].forEach(v => tulostanumerot(v));
The fourth bird
2021-08-01
如果您执行一些
console.log
ging,您将看到
lause.match()
返回找到匹配项的数字数组。
在您的例子中:
["0", "3", "3", "0", "3"]
您收到错误,因为如果没有找到匹配项,
setti
将为空。我们可以像这样检查它。
if (setti) {
// Setti is not undefined
}
然后,如果您想将元素组合成一个字符串,您可以改用
.join
。
if (setti) {
console.log(setti.join());
} else {
console.log("Ei numeroita!");
};
完整代码:
var lause = "s0m3 p30pl3";
function tulostanumerot() {
var numerot = /[0-9]/g;
var setti = lause.match(numerot);
if (setti) {
console.log(setti.join(""));
} else {
console.log("Ei numeroita!");
};
}
var lause = "s0m3 p30pl3";
tulostanumerot()
var lause = "no numbers here";
tulostanumerot()
lejlun
2021-08-01