Он говорит "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) из длины и начинаем там ".
Может ли кто-нибудь рассказать мне о пояснении спецификаций? Я не понимаю. Благодарю.
Помните, что если start
отрицательно, результат length + start
- это число ниже длины. В вашем примере 12 + -6
- 6
- это world!
начинается. Спецификация является буквальной. Он мог бы сказать: "Если начало отрицательно, вычтите abs (start) from sourceLength" (где abs
принимает абсолютное значение), но просто добавление отрицательного числа является простым способом.
Вы думаете о -6 как "6 с знаком минуса перед ним", а не "числом, которое равно 6 ниже нуля".
Если вы добавите -6 в 12, вы получите 6; если вы вычтите -6 с 12, вы получите 18.
причина
array.length + (-5)
Возвращает правильное смещение.