Какое значение по умолчанию для lastIndexOf? - PullRequest
0 голосов
/ 18 февраля 2012

string.lastIndexOf(searchValue[, fromIndex])

MDN говорит, что fromIndex значение по умолчанию равно string.length, однако я действительно думаю, что это string.length-1

Но не имеет значения, что я думаю ... Мне нужно, чтобы кто-то подтвердил значение по умолчанию fromIndex

Вот что они говорят:

"Это может быть любое целое число от 0 до длины строки. Значением по умолчанию является длина строки."

Ответы [ 3 ]

2 голосов
/ 18 февраля 2012

Согласно ECMAScript 5, это будет length строки.

15.5.4.8 String.prototype.lastIndexOf (searchString, position)

Если position равно undefined, предполагается length значения String для поиска всей строки.

...

  1. Вызовите CheckObjectCoercible, передав значение this в качестве аргумента.
  2. Пусть S будет результатом вызова ToString, передав ему значение this в качестве аргумента.
  3. Пусть searchStr будет ToString(searchString).
  4. Пусть numPos будет ToNumber(position). (Если позиция не определена, этот шаг выдает значение NaN).
  5. Если numPos равно NaN, пусть pos будет +∞;, в противном случае пусть pos будет ToInteger(numPos).
  6. Пусть len будет количеством символов в S.
  7. Пусть start min(max(pos, 0), len).
  8. Пусть searchLen будет количеством символов в searchStr.
  9. Возвращает максимально возможное неотрицательное целое число k, не превышающее start, так что k + searchLen не больше len, а для всех неотрицательных целых j, меньших, чем searchLen, символ в позиции k + j в S такой же, как символ в позиция j searchStr; но если такого целого числа k нет, верните значение -1. ​​
0 голосов
/ 18 февраля 2012

Если значение fromIndex больше или равно длине строки, функция возвращает -1.

Если нет, string.substring (fromIndex) выполняет поиск с конца подстроки.

0 голосов
/ 18 февраля 2012

Неважно, вообще.Поскольку индекс начинается с нуля, и string.length, и string.length-1 будут включать всю строку.

РЕДАКТИРОВАТЬ

Вы можете проверить различия в результате довольнопросто:

var s = '01923456789abcdef';
alert(s.lastIndexOf('f',s.length+1));
alert(s.lastIndexOf('f',s.length));
alert(s.lastIndexOf('f',s.length-1));
alert(s.lastIndexOf('f',s.length-2));

Это предупреждает 16, 16, 16, -1.Таким образом, если вы очень обеспокоены дополнительными несколькими циклами, используемыми, когда пользовательский агент запускает .lastIndexOf(), вы можете передать .length-1 и провести несколько дополнительных циклов, анализируя дополнительный параметр.

...