Ответ 1
Метод .slice()
создает (неглубокую) копию массива и принимает параметры, чтобы указать, какое подмножество исходного массива нужно скопировать. Вызов без аргументов просто копирует весь массив. То есть:
_buffer.slice();
// is equivalent to
_buffer.slice(0);
// also equivalent to
_buffer.slice(0, _buffer.length);
РЕДАКТИРОВАТЬ: Не обязателен ли начальный индекс? Да. И нет. Вроде. Ссылки на JavaScript (например, MDN) обычно говорят, что .slice()
требуется хотя бы один аргумент - начальный индекс. Вызов .slice()
без аргументов - это как сказать .slice(undefined)
. В ECMAScript Language Spec шаг 5 в алгоритме .slice()
говорит: "Пусть relativeStart
be ToInteger(start)
". Если вы посмотрите на алгоритм абстрактной операции ToInteger()
, который, в свою очередь, использует ToNumber()
, вы увидите, что он заканчивает преобразование undefined
в 0
.
Тем не менее, в моем собственном коде я всегда говорил .slice(0)
, а не .slice()
- мне кажется, что он более аккуратный.