一个非空字符串indexOf空字符串,返回的为什么是0,不是-1?

我在做表格搜索时遇到这样一个问题:

我们都知道str.indexOf(子字符串)返回的是子字符串在str中的位置。如果str中不存在子字符串,就返回-1.

可是一个非空字符串indexOf空字符串,返回的为什么是0,不是-1?

请下面的小例子:

var str1='ascfg';
for(var i=0;i<str1.length;i++){
    console.log('第'+i+'位:'+str1[i]);
}
console.log("str1.indexOf(''):"+str1.indexOf(''));

打印结果:

第0位:a
第1位:s
第2位:c
第3位:f
第4位:g
str1.indexOf(''):0

但是,如果子字符串是""空字符串str.indexOf("")返回的是却0。
可是上面的例子中,第0位明明是a啊.

为什么会这样呢?

阅读 8.8k
3 个回答

源码里有个条件是如果字符串长度等于0,返回0 (没有为什么,人家就说这样定义的)

clipboard.png

这个问题还真不好解释,要看明白为什么就要看JS解释器的源码,好在解释器也是在语言规范的基础上编写出来的,这是最新语言规范上这个方法的执行步骤。
‘sjdf'.indexOf('') // 0;
'sjdf'.indexof('',2) //2;

图片描述

内置函数, 官方文档写的很清楚
An empty string searchValue will match at any index between 0 and str.length

参考https://developer.mozilla.org...

推荐问题