向含内容的字符串调用indexOf()与lastIndexOf()传入空字符串的结果疑问
indexOf/lastIndexOf 空字符串返回结果底层逻辑
你给出的示例代码运行结果完全符合ECMAScript规范定义:
let foo = 'A'; foo.indexOf(''); // 0 foo.lastIndexOf(''); // 1
核心原因如下:
- 字符串的查找位置对应的是字符之间的间隙,而非单个字符的点位。长度为
n的字符串,共有n+1个有效间隙,索引范围为[0, n]。
对长度为1的字符串'A'来说,只有两个有效间隙:索引0在字符A左侧,索引1在字符A右侧(刚好等于foo.length的取值1),不存在索引为2的有效位置。 indexOf查找空字符串时,默认从起始位置开始匹配,返回第一个匹配的间隙索引,因此返回0。lastIndexOf查找空字符串时,默认从等于字符串长度的位置向前匹配,返回最后一个匹配的间隙索引,因此返回1。
你可以用更长的字符串验证该规则的一致性:
let testStr = 'Hello'; // 长度为5 testStr.indexOf(''); // 0 testStr.lastIndexOf(''); // 5,和字符串长度完全相等
内容的提问来源于stack exchange,提问作者nCardot
相关产品推荐
相关产品推荐

