0

好的,我正在尝试运行以下代码,但我得到了一个异常,即未定义 startWith 方法。这不应该在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);
4

2 回答 2

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;
}
于 2014-05-18T23:25:01.353 回答
-2

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

它应该是:

paragraphs[paragraph].startsWith("born")
于 2014-05-18T23:20:54.607 回答