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

时间:2019-01-25 00:15:32

标签: javascript

我正在努力应对挑战,并尝试进行设置,以便在您传递字符串的情况下,可以确定该字符串中是否存在2至4个字母参数。

我对该函数的测试有效,但是,如果匹配的数组的长度为0(如果所述字符串中没有匹配的字母),则无法测量长度。我收到错误消息:TypeError: Cannot read property 'length' of null

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

TLDR:在抛出错误之前,是否有办法捕捉到TypeError: Cannot read property 'length' of 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 个答案:

答案 0 :(得分:1)

If(matched == null || match.length!= 0)

答案 1 :(得分:0)

  1. 您可以尝试let matched = string.match(regex) || [];
  2. matched.length == null will always be false,因此请尝试matched.length === 0

答案 2 :(得分:0)

需要两项更改才能使其按需工作:

  1. 找不到匹配项时处理空值
  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值。应该避免这一点。不管是否找到匹配项,都返回相同类型的值。