程序保持返回无法读取未定义的属性toLowerCase

时间:2017-07-28 01:36:42

标签: javascript

function isIsogram(str) {

    if (typeof str === undefined) {
        return true
    }

    var passing = true;
    var strn = str.toLowerCase()
    var counts = {}

    for (i = 0; i <= strn.length; i++) {
        var letter = strn.charAt(i)

        if (counts[letter]) {
            counts[letter] = 1 + counts[letter]
        } else {
            counts[letter] = 1
        }

        if(counts[letter] > 1) {
            return passing = false
        }
    }
    return passing
}

针对我不断得到的测试运行此代码之后; TypeError:无法读取未定义的属性'toLowerCase'。请问我该如何解决这个问题以及我出错了什么?

2 个答案:

答案 0 :(得分:0)

应为"undefined"

e.g。

if (typeof str === "undefined")

但你可以用这个替换行,这也会检查空参数。

if (!str) {
  return true;
}

e.g。

function isIsogram(str) {

  if (!str) {
    return true;
  }

  var passing = true;

  var strn = str.toLowerCase();

  var counts = {};

  for (i = 0; i <= strn.length; i++) {

    var letter = strn.charAt(i);

    if (counts[letter]) {
      counts[letter] = 1 + counts[letter];
    } else {
      counts[letter] = 1;
    }

    if (counts[letter] > 1) {
      return passing = false;
    }

  }

  return passing;
}

console.log(isIsogram());
console.log(isIsogram(null));
console.log(isIsogram("asdf"));

答案 1 :(得分:0)

两件事......

首先你可以试试..

if (str == undefined) {
    return true;
}

而不是使用'typeof'

或者其次将“var strn = str.toLowerCase()”放入try / catch中以捕获错误..

try {
    var strn = str.toLowerCase();
} catch (e) {
    return true;
}