开发者问题收集

无法将 null 赋给变量

2022-08-10
530
const letsMatch = (string, char) => {
  const newRegex = new RegExp(char, "gi");
  let result = string.match(newRegex);
  const findNegIndex = result.indexOf(char);
  if (findNegIndex === null) {
    return result = 0;
  } else {
    if (result.length === 2) {
    const findFirstIndex = fiveT.indexOf(char);
    const findSecondIndex = fiveT.indexOf(char, findFirstIndex + 1);
    result = findSecondIndex - findFirstIndex + 2;
    return result;
  } else {
    return (result = 0);
  }
  }
}

console.log(letsMatch('totititiTo', 'r'))

line 4: const findNegIndex = result.indexOf(char); Throws Uncaught TypeError: Cannot read properties of null (reading 'indexOf').

2个回答

根据 文档 ,当未找到匹配项时, String.prototype.match() 将返回 null 不是 空数组)。

并且未找到任何匹配项。

当它返回 null 时,您可以默认为一个空数组:

const letsMatch = (string, char) => {
  const newRegex = new RegExp(char, "gi");
  let result = string.match(newRegex) || []; // here
  const findNegIndex = result.indexOf(char);
  if (findNegIndex === null) {
    return result = 0;
  } else {
    if (result.length === 2) {
      const findFirstIndex = fiveT.indexOf(char);
      const findSecondIndex = fiveT.indexOf(char, findFirstIndex + 1);
      result = findSecondIndex - findFirstIndex + 2;
      return result;
    } else {
      return (result = 0);
    }
  }
}

console.log(letsMatch('totititiTo', 'r'))

(顺便说一句,目前尚不清楚此函数的目的是什么,或者您期望 return result = 0 除了 return 0 之外还意味着什么。但至少 错误 是因为你假设 string.match 将始终返回一个数组,并且存在不适用的用例。)

David
2022-08-10

取决于您编写的代码...

使用 ?. - 如果 result 没有该属性,它将返回 undefined,并且 || 会将其分流到 null const findNegIndex = result?.indexOf(char) || null;

const findNegIndex = result ? result.indexOf(char) : null;

为了便于阅读,我还会避开名为“string”的变量 - 因为 String.match

Count Spatula
2022-08-10