Javascript 为什么'';(空字符串)是否渗透所有字符串?

Javascript 为什么'';(空字符串)是否渗透所有字符串?,javascript,string,standards,language-lawyer,ecma262,Javascript,String,Standards,Language Lawyer,Ecma262,我今天有点困惑,“string”.indexOf(“”)总是返回0,但我希望-1(对于false);相反,“string”.lastIndexOf(“”)始终返回6 lastIndexOf更容易理解,因为字符串有6个字母长(“string.length,零索引返回5),但我在ECMAscript规范(或)中没有看到任何地方描述为什么'会被视为单词/字符边界 这里到底发生了什么?规范上说: 返回不小于起始值的最小整数k k+searchLen不大于len 非负整数j小于searchLen,字符在

我今天有点困惑,
“string”.indexOf(“”)
总是返回
0
,但我希望
-1
(对于
false
);相反,
“string”.lastIndexOf(“”)始终返回
6

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

这里到底发生了什么?

规范上说:

返回不小于起始值的最小整数k k+searchLen不大于len 非负整数j小于searchLen,字符在 S的位置k+j与位置j处的字符相同 搜索str;但是如果没有这样的整数k,那么返回 值-1

该条件在位置0处满足,原因是:由于您正在搜索空字符串,因此您能想到的任何语句都将保留每个字符,因为它没有字符

更正式地说,对于任何语句
p
,如果
S=∅
P(x)
保持
∀ x∈ S

是,
'
被视为单词/字符边界。
indexOf()
返回找到的匹配项的第一次出现,并且仅在根本找不到字符串时返回
-1
'
被视为…嗯…空字符串。一个空字符串在另一个字符串中的第一次出现是在它的开头。这个问题要求对规范进行澄清,而不是出于模糊的原因。所以我投票重新打开并添加[语言律师]标签。