slice
является методом массива, который извлекает подмассив из массива:
Метод slice
принимает два аргумента, начать и конца и возвращает массив, содержащий элементы массива от элемента начало до , но не включая элемент конец (или через конец массива , если конец - не определено).
Например:
[0,1,2,3,4].slice(2); // [2,3,4]
[0,1,2,3,4].slice(-2); // [3,4]
[0,1,2,3,4].slice(2,4); // [2,3]
[0,1,2,3,4].slice(); // [0,1,2,3,4]
В частности, как slice()
и slice(0)
производят копию массива. Затем вы сможете изменить копию, не затрагивая оригинал, и наоборот.
Дополнительно, он также может быть использован с массивами типа объектов:
slice
функция намеренно родовое; он не требует, чтобы его это значение было объектом Array. Поэтому его можно перевести на другие виды объектов для использования в качестве метода.
Поэтому он часто используется для создания реального массива из массива типа объекта:
[].slice.call({0:0, 1:1, 2:2, length:3}); // [0,1,2]
Примечание этот трюк уже не нужно в ECMAScript 6, потому что вы можете использовать Array.from
:
Array.from({0:0, 1:1, 2:2, length:3}); // [0,1,2]
Наличие реального массива вместо объекта, подобного массиву, имеет то преимущество, что вы можете использовать методы массива на них.
Он превращает аргументы функции в массив, поэтому на нем можно использовать методы прототипа Array. – Xufox
о второй части вопрос. Я вижу, что многие люди делают «var args = [] .slice.call (arguments, 0);». Есть ли какое-то преимущество в этом шаблоне, а не просто использование 'var args = arguments'? –
Прочитайте мой комментарий выше: он позволяет использовать методы прототипа Array. Вы не можете «сортировать» объект 'arguments', вы не можете« фильтровать »объект' arguments', вы не можете «сопоставить» объект 'arguments'. Вы можете сделать это с помощью объекта Array -slice'd 'arguments'. – Xufox