无法将 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