为什么''(空字符串)渗透所有字符串?

JKi*_*rtz 2 javascript string standards ecma262 language-lawyer

我今天只是遇到了一些困惑,"string".indexOf('');总是回归0,但我希望-1(因为false); 相反,"string".lastIndexOf('');总是返回6

lastIndexOf更容易理解,因为字符串是6个字母长("string".length是零索引返回5)但我没有看到ECMAscript规范(5.16.0)中描述为什么 ''会被视为单词/字符边界的任何地方

究竟是什么发生在这里?

Ori*_*iol 6

规范说:

返回最小的可能的整数ķ比不小于启动使得ķ + SEARCHLEN不大于LEN,并且对于所有的非负整数Ĵ小于SEARCHLEN,在位置的字符ķ + Ĵ小号是一样在位置的字符ĴsearchStr ; 但如果没有这样的整数k,则返回值-1.

由于空洞的真相,这个条件在第0位完成:因为你正在搜索空字符串,所以你能想到的任何语句都会为每个字符保留,因为它没有字符.

更正式地说,对于任何声明P,if S = ?,P(x)hold ? x ? S.