我知道,indexOf
会搜索第一个匹配的字符串。
这是我的示例代码:
Text = 'why/f l';
cmds = {
"/f l" : ['Friends']
}
for(var k in cmds){
if (Text.indexOf(k) == 0){
console.log('match!');
console.log('function!' + cmds[k]);
return // Return and stop!
}
}
正如您所看到的那样...... why/f l
不匹配,但/f l
却匹配。为什么呢?我知道我可以使用.match,但我认为这会更快。是因为indexOf只在第一个字符的字符串开头处启动匹配过程吗?有点丢失,只是想弄清楚,谢谢!
答案 0 :(得分:2)
IndexOf返回匹配字符串的第一个字符的索引,如果没有匹配则返回-1。
所以
"abcdef".indexOf("def")
将返回3
你的if语句如下:
if (Text.indexOf(k) == 0)
用简单的英语写成,如果Text以字符串k开头。
你可能意味着if (Text.indexOf(k) != -1)
如果Text包含字符串k,则以简单英语读取。
因为如果Text包含k,它将返回一个正数,否则它将返回-1。
答案 1 :(得分:2)
您的测试不正确。 indexOf方法返回(因为它的名字表示第一个匹配的索引)。因此,如果您想测试k
是否为Text
的子字符串,您可能需要修复测试:
if (Text.indexOf(k) > -1) {
以下是documentation
对此的陈述:
indexOf()方法返回调用String中的索引 第一次出现指定值的对象,开始 在fromIndex搜索。如果找不到值,则返回-1。