Какой в этом смысл?ломтик(0) здесь?
Я изучал источник jQuery, когда я нашел это (v1. 5 строка 2295):
namespace = new RegExp("(^|.)" +
jQuery.map( namespaces.slice(0).sort(), fcleanup ).join(".(?:.*.)?") + "(.|$)");
мой вопрос, зачем использовать slice(0)
здесь?
5 ответов:
sort()
изменяет массив, на который он вызван - и не очень приятно обходить мутирующие вещи, на которые может полагаться другой код.
slice()
всегда возвращает новый массив - массив, возвращенныйslice(0)
идентичен входу, что в основном означает, что это дешевый способ дублировать массив.
arr.slice(0)
создает копию исходного массива, взяв кусочек от элемента с индексом 0 до последнего элемента.Он также используется, чтобы преобразовать массив-как объекты в массивы. Например, DOM
NodeList
(возвращается несколькими методами DOM, такими какgetElementsByTagName
) не является массивом, но это массивоподобный объект сlength
поле и индексируется в JavaScript. Чтобы преобразовать его в массив, часто используется:var anchorArray = [].slice.call(document.getElementsByTagName('a'), 0)
slice (0) создает новый массив, идентичный исходному массиву. Много раз вы хотите сохранить исходный массив и создать новый.
Если вы используете slice (1), он создаст другой массив, начиная с позиции индекса 1.
подобные вещи имеют место и для строк.
slice(0)
позволяет вернуть массив существующего массива, на который вы ссылаетесь, в данном случае пространства имен.
в дополнение к тому, что @Anon сказал:
The
slice()
метод выбирает элементы, начинающиеся с заданного начального аргумента, и заканчивается на заданном конечном аргументе, но не включает его.Пример 1:
var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"]; var citrus = fruits.slice(1, 3);
результат цитрусовых будет:
Orange,Lemon
Example2:
var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"]; var citrus = fruits.slice(-3, -1);
результат цитрусовых будет:
Lemon,Apple
дополнительная информация здесь.