Подтвердить что ты не робот

Какой смысл .slice(0) здесь?

Я изучал источник jQuery, когда нашел это (строка v1.5 2295):

namespace = new RegExp("(^|\\.)" +
  jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");

Мой вопрос: зачем использовать slice(0) здесь?

4b9b3361

Ответ 1

sort() изменяет массив, на который он вызвал - и не очень приятно обходить мутирующие вещи, на которые может положиться другой код.

slice() всегда возвращает новый массив - массив, возвращаемый slice(0), идентичен входу, что в основном означает дешевый способ дублирования массива.

Ответ 2

arr.slice(0) создает копию исходного массива, беря срез из элемента с индексом 0 в последний элемент.

Он также используется для преобразования объектов, подобных массиву, в массивы. Например, DOM NodeList (возвращается несколькими методами DOM, такими как getElementsByTagName) не является массивом, но он представляет собой объект, похожий на массив, с полем length и индексируемый в JavaScript. Чтобы преобразовать его в массив, часто используется:

var anchorArray = [].slice.call(document.getElementsByTagName('a'), 0)

Ответ 3

slice(0) позволяет вам возвращать массив существующего массива, на который вы ссылаетесь, в этом случае пространства имен.

Ответ 4

В дополнение к тому, что @Anon сказал:

Метод slice() выбирает элементы, начинающиеся с заданного начального аргумента, и заканчивается на, но не включает в себя заданный конечный аргумент.

Пример1:

var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(1, 3);

Результат цитрусовых будет:

Orange,Lemon

Пример 2:

var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(-3, -1);

Результат цитрусовых будет:

Lemon,Apple

Дополнительную информацию можно найти здесь.