未捕获:类型错误:无法读取 null 的属性“toString”

时间:2021-08-01 11:44:52

标签: javascript regex null

这里完全是菜鸟,我目前正在 javascript 中学习正则表达式。我有一个函数应该从字符串中选择 0 到 9 之间的数字。只要它搜索的变量有字母或数字,该函数就可以正常工作,但是当输入空值时,它会给出以下错误:

未捕获:类型错误:无法读取 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!");
};

4 个答案:

答案 0 :(得分:2)

如果未找到匹配项,则 String.prototype.match() 返回 null

所以,你有两个选择来处理这个

  1. 检查 setti 是否有真值,你可以像这样 if(setti)
  2. 使用 Optional chaining (?.) 就像 setti?.toString(), .

答案 1 :(得分:1)

如果您执行一些 console.log 计算,您会看到 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()

答案 2 :(得分:1)

关于您的代码的一些说明:

  • 方法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));

答案 3 :(得分:0)

有几种方法可以检查这一点。而且应该不难在网上找到任何东西:)

if(lause) //Will check if there is any value to the string, which is a non false value. Example: 0, null, undefined false will all fail this statement

OR

if(typeof lause !== "undefined") //Simple but will also pass Arrays and objects

if(typeof lause  === "string" && typeof lause  === "number") //Will only be passed if matching. So if the variable is a array or object it will not be passed