Строки как массивы
В ECMAScript 5 (и во многих последних версиях броузеров, включая IE8, появившихся до выхода стандарта ECMAScript 5) строки своим поведением напоминают массивы, доступные только для чтения. Вместо метода charAt()
для обращения к отдельным символам можно использовать квадратные скобки:
var s = test;
s.charAt(0) // => "t"
s[1] // => "e"
Оператор typeof
для строк все так же возвращает «string», а если строку передать методу Array.isArray()
, он вернет false
.
Основное преимущество, которое дает поддержка индексирования строк, – это возможность заменить вызов метода charAt()
квадратными скобками и получить более краткий, удобочитаемый и, возможно, более эффективный программный код. Однако тот факт, что строки своим поведением напоминают массивы, означает также, что к ним могут применяться универсальные методы массивов.
Например:
s = "JavaScript"
Array.prototype.join.call(s, " ") // => "J a v a S c r i p t"
Array.prototype.filter.call(s, // Фильтровать символы строки
function(x) {
return x.match(/[^aeiou]/); // Совпадение только с согласными
}).join("")
Имейте в виду, что строки являются неизменяемыми значениями, поэтому при работе с ними как с массивами их следует интерпретировать как массивы, доступные только для чтения.
Такие методы массивов, как push()
, sort()
, reverse()
и splice()
, изменяют исходный массив и не будут работать со строками. Однако попытка изменить строку с помощью метода массива не вызовет ошибку: строка просто не изменится.