ECMAScript String.prototype.slice spec: «sourceLength + start»

1

Он говорит "sourceLength + start", где я понимаю "sourceLength-start". Что такое определение?

Сегодня я просмотрел спецификации ECMA-Script для string.prototype.slice(), и я немного запутался. Для отрицательного аргумента он говорит: "Если начало отрицательно, оно рассматривается как sourceLength + start, где sourceLength - длина строки". Но затем я рассмотрю простой пример:

var source = "Hello world!";
console.log(source.length); // 12
var substring = source.slice(-6);
console.log(substring); // world!

Для меня это выглядит примерно так: sourceLength == 12, substract 6 из 12, поэтому начинайте с позиции 6.

Если я предполагаю, что это будет разговор между скриптом и интерпретатором, он будет выглядеть примерно так: интерпретатор: "эй, это длина строки?", Скрипт: "12", переводчик: "Хорошо, у меня есть здесь отрицательный аргумент начала, поэтому давайте вычитаем это число (-6) из длины и начинаем там ".

Может ли кто-нибудь рассказать мне о пояснении спецификаций? Я не понимаю. Благодарю.

Теги:

3 ответа

2
Лучший ответ

Помните, что если start отрицательно, результат length + start - это число ниже длины. В вашем примере 12 + -6 - 6 - это world! начинается. Спецификация является буквальной. Он мог бы сказать: "Если начало отрицательно, вычтите abs (start) from sourceLength" (где abs принимает абсолютное значение), но просто добавление отрицательного числа является простым способом.

1

Вы думаете о -6 как "6 с знаком минуса перед ним", а не "числом, которое равно 6 ниже нуля".

Если вы добавите -6 в 12, вы получите 6; если вы вычтите -6 с 12, вы получите 18.

  • 0
    Ваше первое предложение действительно прибивает это.
0

причина

array.length + (-5)

Возвращает правильное смещение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню