Объект String в JavaScript

Объект-конструктор String создает объект, значением которого является строка, преобразованная из переданного аргумента. Такая строка полностью соответствует примитивному строковому типу данных, но имеет тип object.

alert(new String(null)); // 'null'
alert(new String(false)); // 'false'
alert(new String()); // ''
alert(new String(0)); // '0'

Основная цель введения объекта String - это использование его свойств и методов для работы со строками. Ведь со строками можно производить много разных операций, например определить длину строки, найти подстроку в строке и заменить ее, сделать все буквы заглавными и т.д. JavaScript различает примитивные строки от объектов класса String, но все свойства и методы можно применять и к примитивным значениям. При вызове свойств на примитивной строке JavaScript автоматически оборачивает ее конструктором String.

Свойства объекта String

length

Свойство length всегда имеет значение 1.

alert(String.length); // 1

prototype

Свойство prototype наследуется из класса Object.

var str = new String();
String.prototype.prop = 'новое свойство';
alert(str.prop); /* 'новое свойство' */

Методы объекта String

fromCharCode()

Метод fromCharCode() возвращает строку, созданную из значений, указанных в кодировке Unicode. Метод может принимать любое количество аргументов. Для удобства аргументы можно передавать в шестнадцатеричной форме.

alert(String.fromCharCode(100, 101, 102)); // def
alert(String.fromCharCode(0x64, 0x65, 0x66)); // def

Свойства наследников String

constructor

Свойство constructor наследуется из класса Object.

var str = new String();
alert(str.constructor); /* 'function String() {[native code]}' */

length

Свойство length определяет длину строки (количество символов в строке). JavaScript определяет длину строки по количеству бит. Большинство символов в Unicode представлены в 16-битовой форме, но есть редкие символы, которые представлены большим количеством бит. Поэтому свойство length может дать неверное значение.

alert('string'.length); // 6

N

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

alert('asd'[2]); // d

Методы наследников String

charAt()

Метод charAt() возвращает символ, находящийся на указанной позиции. Работает аналогично свойству str[N], поэтому используется редко.

alert('new string'.charAt(5)); // 't'

charCodeAt()

Метод charCodeAt() возвращает не символ (как charAt()), а числовое представление данного символа в кодировке Unicode.

alert('new string'.charCodeAt(5)); // 116

indexOf()

Метод indexOf() возвращает позицию первого вхождения подстроки в строку. Поиск ведется с первого символа строки до последнего. Первым аргументом указывается подстрока, которая ищется в исходной строке. Второй аргумент необязательный. Он указывает, с какой позиции следует начать поиск. Если подстрока не найдена, то возвращается -1. Данный метод осуществляет регистрозависимый поиск.

var str = 'something thin';
alert(str.indexOf('thin')); // 4
alert(str.indexOf('thin', 5)); // 10
alert(str.indexOf('thin', 11)); // -1
alert(str.indexOf('Thin')); // -1

lastIndexOf()

Метод lastIndexOf() аналогичен методу indexOf(), но поиск подстроки ведется, начиная с последнего символа строки до первого. Первым аргументом указывается подстрока, которая ищется в исходной строке. Второй аргумент необязательный. Он указывает, с какой позиции следует начать поиск. Если подстрока не найдена, то возвращается -1. Данный метод осуществляет регистрозависимый поиск.

var str = 'something thin';
alert(str.lastIndexOf('thin')); // 10
alert(str.lastIndexOf('thin', 9)); // 4
alert(str.lastIndexOf('thin', 3)); // -1
alert(str.lastIndexOf('Thin')); // -1

match()

Метод match() выполняет поиск сопоставлений исходной строки с регулярным выражением, переданным в качестве аргумента. Если в качестве аргумента передаётся не регулярное выражение, то аргумент преобразуется к нему с помощью конструктора RegExp. Если сопоставления не будут найдены, то вернётся null. Если регулярное выражение не содержит флаг g, то результирующий объект будет иметь те же свойства, как при вызове метода exec() объекта регулярного выражения:

  • [0] - сопоставленная подстрока.
  • [1 … n] - запомненные группы символов, указанные в скобках. Номера групп от 1 до n.
  • ['index'] - позиция символа, с которого начинается сопоставленная подстрока.
  • ['input'] - исходная строка.

Если используется флаг глобального сопоставления, то результатом будет массив, содержащий все сопоставления.

var str = 'something THIS';

var arr_g = str.match(/th(..)/gi); /* с флагом g */
alert(arr_g); // thin, THIS

var arr = str.match(/th(..)/i); /* без флага g */
alert(arr[0]); // thin
alert(arr[1]); // in
alert(arr.index); // 4
alert(arr.input); // something THIS

replace()

Метод replace() возвращает исходную строку, в которой произведена замена искомой подстроки на заданную. Метод replace() возвращает новую строку, исходная строка остаётся без изменений. Первым параметром передаётся искомая строка или регулярное выражение для сопоставления. Вторым параметром передаётся новая подстрока для замены или функция, которая возвращает строку для замены.

Замена происходит только для первого совпадения. Если искомая подстрока может быть найдена несколько раз, тогда первым параметром необходимо указать регулярное выражение с флагом глобального поиска.

var str = 'something thin';
alert(str.replace('thin', 'THIN')); /* 'someTHINg thin' */
alert(str.replace(/thin/g, function() {return '1234';})); /* 'some1234g 1234' */

Если вторым параметром метода указана строка, то она может содержать следующие специальные шаблоны для замены:

Шаблон Результат применения
$$ Вставляет символ $
$& Вставляет найденную подстроку
$` Вставляет часть исходной строки, которая расположена перед найденной подстрокой
$' Вставляет часть исходной строки, которая расположена после найденной подстроки
$n Вставляет n-ную по счёту подгруппу из регулярного выражения первого параметра

Если вторым параметром метода указана функция, то она может принимать аргументы с определённым содержимым:

Имя аргумента Значение
match Найденная подстрока
p1, p2, …, pn n-ная по счёту подгруппа из регулярного выражения первого параметра
offset Позиция вхождения найденной подстроки
string Вся исходная строка

Аргументы обязательно должны располагаться в таком порядке.

Метод search() проверяет, содержит ли данная строка подстроку, удовлетворяющую регулярному выражению (шаблону). В качастве аргумента передаётся регулярное выражение. Если подстрока найдена, то метод возвращает позицию её вхождения. В противном случае возвращается -1. Данный метод выполняется быстрее, чем match().

var str = 'something thin';
alert(str.search(/thin/)); // 4
alert(str.search(/^thin/)); // -1

slice()

Метод slice() извлекает часть строки из исходной по указанным границам. Первым аргументом указывается позиция символа, с которого начинается извлечение (сам символ включается в результат). Вторым - позиция символа, на котором заканчивается извлечение (сам символ в конечную строку не включается). Если второй аргумент не указан, то извлечение идёт до конца строки. Если аргумент является отрицательным числом, то позиция высчитывается от конца строки.

var str = 'something thin';
alert(str.slice(4)); // 'thing thin'
alert(str.slice(-4, -1)); // 'thi'

split()

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

var str = 'something thin';
alert(str.split('thin')); // 'some,g ,'
alert(str.split('')); // 's,o,m,e,t,h,i,n,g, ,t,h,i,n'

substr()

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

Вторым аргументом указывается количество символов результирующей строки. Если он опущен, то подстрока извлекается до конца исходной строки. Если второй аргумент отрицательный или равен нулю, то результатом будет пустая строка.

var str = 'something thin';
alert(str.substr(4)); // 'thing thin'
alert(str.substr(4, 0)); // ''
alert(str.substr(-4, 4)); // 'thin'

toLowerCase()

Метод toLowerCase() возвращает исходную строку, в которой все символы преобразованы в нижний регистр.

var str = 'someThing Thin';
alert(str.toLowerCase()); // 'something thin'

toUpperCase()

Метод toUpperCase() возвращает исходную строку, в которой все символы преобразованы в верхний регистр.

var str = 'someThing Thin';
alert(str.toUpperCase()); // 'SOMETHING THIN'

toString()

Метод toString() возвращает строковое значение объекта.

var str = new String('some');
alert(str); // 'some'

trim()

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

var str = '   something   ';
alert(str.trim()); // 'something'