Какой в этом смысл?ломтик(0) здесь?


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

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

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

5 54

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

дополнительная информация здесь.