it-roy-ru.com

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

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

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

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

57
mVChr

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

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

95
Anon.

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

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

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

slice (0) создает новый массив, идентичный исходному массиву. Много раз вы хотите сохранить исходный массив и создать новый. 

Если вы используете slice (1), он создаст другой массив, начиная с позиции индекса 1. 

Подобные вещи справедливы и для строк. 

3
Abhi

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

0
TNC

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

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

Example1:

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

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

0
Luis Teijon