当定义startsWith时,为什么控制台会给我一个例外?

时间:2014-05-18 23:08:08

标签: javascript exception methods startswith

好吧我正在尝试运行以下代码,我得到一个异常,即startsWith方法未定义。不应该在javascript中自动定义吗?

var mailArchive = retrieveMails();
var livingCats = {"Spot": true};

for (var mail = 0; mail < mailArchive.length; mail++) {
  var paragraphs = mailArchive[mail].split("\n");
  for (var paragraph = 0;
   paragraph < paragraphs.length;
   paragraph++) {
if (startsWith(paragraphs[paragraph], "born")) {
  var names = catNames(paragraphs[paragraph]);
  for (var name = 0; name < names.length; name++)
    livingCats[names[name]] = true;
}
else if (startsWith(paragraphs[paragraph], "died")) {
  var names = catNames(paragraphs[paragraph]);
  for (var name = 0; name < names.length; name++)
    delete livingCats[names[name]];
  }
 }
}

show(livingCats);

2 个答案:

答案 0 :(得分:2)

某些版本的javascript(Firefox中的实验方法)有一个.startsWith()字符串方法,您可以使用它:

if (paragraphs[paragraph].startsWith("died"))

常规javascript没有像您尝试使用的全局函数startsWith(),除非您正在加载某个具有该功能的库,这就是浏览器告诉您未定义的原因。


可以在任何版本的JS中使用的推荐解决方案是:

if (paragraphs[paragraph].indexOf("died") === 0) 

代替。


或者,您可以定义您正在使用的全局函数:

function startsWith(src, find) {
    return src.substr(0, find.length) == find;
}

答案 1 :(得分:-2)

它是String的方法,而不是全局函数。

应该是:

paragraphs[paragraph].startsWith("born")