Выразительный JavaScript (Хавербеке) - страница 41

, чтобы получить (и удалить) первый элемент списка. Функция >urgentlyRememberTo тоже добавляет задачу, но только в начало списка.

У метода >indexOf есть родственник по имени >lastIndexOf, который начинает поиск элемента в массиве с конца:

>console.log([1, 2, 3, 2, 1].indexOf(2));

>// → 1

>console.log([1, 2, 3, 2, 1].lastIndexOf(2));

>// → 3

Оба метода, >indexOf и >lastIndexOf, принимают необязательный второй аргумент, который задаёт начальную позицию поиска.

Ещё один важный метод – >slice, который принимает номера начального (start) и конечного (end) элементов, и возвращает массив, состоящий только из элементов, попадающих в этот промежуток. Включая тот, что находится по индексу start, но исключая тот, что по индексу end.

>console.log([0, 1, 2, 3, 4].slice(2, 4));

>// → [2, 3]

>console.log([0, 1, 2, 3, 4].slice(2));

>// → [2, 3, 4]

Когда индекс end не задан, >slice выбирает все элементы после индекса start. У строк есть схожий метод, который работает так же.

Метод >concat используется для склейки массивов, примерно как оператор >+ склеивает строки. В примере показаны методы >concat и >slice в деле. Функция принимает массив >array и индекс >index, и возвращает новый массив, который является копией предыдущего, за исключением удалённого элемента, находившегося по индексу >index.

>function remove(array, index) {

>  return array.slice(0, index).concat(array.slice(index + 1));

>}

>console.log(remove(["a", "b", "c", "d", "e"], 2));

>// → ["a", "b", "d", "e"]

Строки и их свойства

Мы можем получать значения свойств строк, например >length и >toUpperCase. Но попытка добавить новое свойство ни к чему не приведёт:

>var myString = "Шарик";

>myString.myProperty = "значение";

>console.log(myString.myProperty);

>// → undefined

Величины типа строка, число и булевские – не объекты, и хотя язык не жалуется на попытки назначить им новые свойства, он на самом деле их не сохраняет. Величины неизменяемы.

Но у них есть свои встроенные свойства. У каждой строки есть набор методов. Самые полезные, пожалуй – >slice и >indexOf, напоминающие те же методы у массивов.

>console.log("кокосы".slice(3, 6));

>// → осы

>console.log("кокос".indexOf("с"));

>// → 4

Разница в том, что у строки метод >indexOf может принять строку, содержащую больше одного символа, а у массивов такой метод работает только с одним элементом.

>console.log("раз два три".indexOf("ва"));

>// → 5

Метод >trim удаляет пробелы (а также переводы строк, табуляцию и прочие подобные символы) с обоих концов строки.

>console.log("  ладно  \n ".trim());

>// → ладно

Мы уже сталкивались со свойством строки >length