我正在遵循Eloquent Javascript一书中的例外情况,并提出了这段代码:
function between(string, start, end)
{
// Start AT the last character position of the start string
var startAt = string.indexOf(start) + start.length;
//Count the position of the end string first character
var endAt = string.indexOf(end, startAt);
return string.slice(startAt, endAt);
}
var betweenIn = between('Inazuma Eleven', 'Ina', 'ven');
console.log(betweenIn);
代码工作正常。它在中间提取了一段字符串。现在我试着真正理解这篇文章,但有一点我不清楚。变量endAt检查字符串的第三个给定参数的第一个字符位置,(在这种情况下我的字符串是'Inazuma Eleven'结束参数是'ven'。我需要那个用于切片的字符串,但它似乎是第二个参数indexOf方法没有做任何事情。如果我删除它,我会得到相同的结果。为什么会这样?
答案 0 :(得分:2)
indexOf
的第二个参数默认为0.这是字符串中将开始查找匹配子字符串的位置。
在起始字符串结束后开始确保a)如果起始字符串和结束字符串相同,则结束字符串与其第一个实例不匹配,并且b)您必须扫描较少的目标字符串,以便代码运行得更快。
在这种情况下,您的开始和结束字符串是不同的,因此结果是相同的。但是,由于indexOf
方法将搜索更多的字符串(从0开始而不是从第4个字符开始),因此它的运行速度会慢一些。