Почему '' (пустая строка) пронизывает все струны?

Я сегодня немного запутался, "string".indexOf(''); всегда возвращает 0, но я ожидал -1 (для false); наоборот, "string".lastIndexOf(''); всегда возвращает 6

lastIndexOf легче понять, поскольку строка состоит из 6 букв ("string".length, при нулевом индексе возвращается 5), но я нигде не вижу в спецификации ECMAscript (5.1 или 6.0), который описывает, почему '' будет обрабатываться как граница слова / символа.

Что именно здесь происходит?


person JKirchartz    schedule 14.10.2015    source источник
comment
Да, '' рассматривается как граница слова / символа.   -  person PitaJ    schedule 14.10.2015
comment
indexOf() возвращает первое вхождение найденного совпадения и возвращает -1 только, если строка вообще не найдена.   -  person Etheryte    schedule 14.10.2015
comment
'' рассматривается как ... ммммм ... пустая строка. Первое появление пустой строки внутри другой строки находится в самом ее начале.   -  person    schedule 14.10.2015
comment
Дубликат про Java. И этот вопрос требует уточнения спецификации, а не по какой-то туманной причине. Поэтому я голосую за повторное открытие и добавление тега [language-lawyer].   -  person Oriol    schedule 14.10.2015


Ответы (1)


В спецификации говорится:

Возвращает наименьшее возможное целое число k не меньше start, такое, что k + searchLen не больше len, а для всех неотрицательных целых чисел j меньше searchLen символ в позиции k + j of S совпадает с символом в позиции j в searchStr; но если такого целого числа k нет, вернуть значение -1.

Это условие выполняется в позиции 0 из-за пустой истины: поскольку вы ищите пустую строку, любая Утверждение, которое вы можете придумать, будет иметь место для каждого символа, потому что в нем нет символов.

Более формально, для любого оператора P, если S = ∅, P(x) содержит ∀ x ∈ S.

person Oriol    schedule 14.10.2015