Я изучал источник 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
Дополнительную информацию можно найти здесь.