开发者问题收集

测试空长度属性是否为空并返回字符串的方法?

2019-01-25
1432

我正在解决一个挑战,并尝试进行设置,以便在您传递字符串时,您可以确定该字符串中是否有 2 到 4 个字母参数。

我对函数的测试成功了,但是如果匹配的数组长度为 0(如果所述字符串中没有匹配的字母),则无法测量长度。我收到错误: TypeError:无法读取 null 的属性“长度”

我尝试使用一个条件,如果长度为 null,它将返回一个字符串。没有用,我不确定是否有办法将此错误汇入条件。有什么想法吗?

TLDR:有没有办法在抛出错误之前捕获 TypeError:无法读取 null 的属性“长度”

function countLetters(string, letter) {
    let regex = new RegExp(letter, 'g');
    let matched = string.match(regex);
    if (matched.length == null) {
        return "There are no matching characters.";
    } else {
        let totalLetters = matched.length;
        return (totalLetters >= 2 && totalLetters <= 4)? true : false;
    } 
}
countLetters('Letter', 'e');
true
countLetters('Letter', 'r');
false
countLetters('Letter', 'z');
//TypeError: Cannot read property 'length' of null
3个回答

如果(matched == null ||matched.length != 0)

Ryan Schlueter
2019-01-25
  1. 您可以尝试 let matches = string.match(regex) || [];
  2. matched.length == null 将始终为 false ,因此请尝试 matched.length === 0
vsemozhebuty
2019-01-25

需要进行两项更改才能使其按您需要的方式工作:

  1. 未找到匹配项时处理 null
  2. 适当检查长度

以下是更正后的代码:

function countLetters(string, letter) {
    let regex = new RegExp(letter, 'g');
    let matched = string.match(regex) || [];
    if (matched.length == 0) {
        return "There are no matching characters.";
    } else {
        let totalLetters = matched.length;
        return (totalLetters >= 2 && totalLetters <= 4)? true : false;
    } 
}

我强烈建议您适当地命名您的方法。它与返回值或其类型不一致。此外,您返回 stringboolean 值。应该避免这样做。无论是否找到匹配项,都返回相同类型的值。

shamanth Gowdra Shankaramurthy
2019-01-25