Я изучал источник jQuery, когда нашел это (строка v1.5 2295):
namespace = new RegExp("(^|\\.)" +
jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
Мой вопрос: зачем использовать slice(0) здесь?
Я изучал источник jQuery, когда нашел это (строка v1.5 2295):
namespace = new RegExp("(^|\\.)" +
jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
Мой вопрос: зачем использовать slice(0) здесь?
sort() изменяет массив, на который он вызвал - и не очень приятно обходить мутирующие вещи, на которые может положиться другой код.
slice() всегда возвращает новый массив - массив, возвращаемый slice(0), идентичен входу, что в основном означает дешевый способ дублирования массива.
arr.slice(0) создает копию исходного массива, беря срез из элемента с индексом 0 в последний элемент.
Он также используется для преобразования объектов, подобных массиву, в массивы. Например, DOM NodeList (возвращается несколькими методами DOM, такими как getElementsByTagName) не является массивом, но он представляет собой объект, похожий на массив, с полем length и индексируемый в JavaScript. Чтобы преобразовать его в массив, часто используется:
var anchorArray = [].slice.call(document.getElementsByTagName('a'), 0)
slice(0) позволяет вам возвращать массив существующего массива, на который вы ссылаетесь, в этом случае пространства имен.
В дополнение к тому, что @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
Дополнительную информацию можно найти здесь.