String
Объект String
используется, чтобы представить и конструировать последовательность символов.
Синтаксис
Строковые литералы могут быть следующих форм:
'строка текста'
"строка текста"
"中文 español English हिन्दी العربية português বাংলা русский 日本語 ਪੰਜਾਬੀ 한국어 தமிழ்"
Кроме регулярных печатных символов можно использовать специальные символы, которые можно закодировать, используя нотацию escape-последовательностей:
Код | Вывод |
---|---|
\0 |
нулевой символ (символ NUL) |
\' |
одинарная кавычка |
\" |
двойная кавычка |
\\ |
обратный слэш |
\n |
новая строка |
\r |
возврат каретки |
\v |
вертикальная табуляция |
\t |
табуляция |
\b |
забой |
\f |
подача страницы |
\uXXXX |
кодовая точка Юникода |
\xXX |
символ из кодировки Latin-1 |
Либо можно использовать глобальный объект String
напрямую:
String(thing)
new String(thing)
Параметры
thing
- Всё, что может быть преобразовано в строку.
Описание
Строки полезны для хранения данных, которые можно представить в текстовой форме. Некоторые из наиболее частых операций со строками — это проверка их длины, построение строки с помощью операций строковой конкатенации + и +=, проверка на существование или местоположение подстрок с помощью метода indexOf()
, либо извлечение подстрок с помощью метода substring()
.
Доступ к символам
Существует два способа добраться до конкретного символа в строке. В первом способе используется метод charAt()
:
return 'кот'.charAt(1); // вернёт "о"
Другим способом (введённым в ECMAScript 5) является рассмотрение строки как массивоподобного объекта, в котором символы имеют соответствующие числовые индексы:
return 'кот'[1]; // вернёт "о"
При доступе к символам посредством нотации с квадратными скобками, попытка удалить символ, или присвоить значение числовому свойству закончится неудачей, поскольку эти свойства являются незаписываемыми и ненастраиваемыми. Смотрите документацию по методу Object.defineProperty()
для дополнительной информации.
Сравнение строк
Разработчики на C имеют для сравнения строк функцию strcmp()
. В JavaScript вы просто используете операторы меньше и больше:
var a = 'a';
var b = 'b';
if (a < b) { // true
print(a + ' меньше чем ' + b);
} else if (a > b) {
print(a + ' больше чем ' + b);
} else {
print(a + ' и ' + b + ' равны.');
}
Подобный результат также может быть достигнут путём использования метода localeCompare()
, имеющегося у всех экземпляров String
.
Разница между строковыми примитивами и объектами String
Обратите внимание, что JavaScript различает объекты String
и значения строкового примитива (то же самое верно и для объектов Boolean
и Number
).
Строковые литералы (обозначаемые двойными или одинарными кавычками) и строки, возвращённые вызовом String
в неконструкторном контексте (то есть, без использования ключевого слова new
) являются строковыми примитивами. JavaScript автоматически преобразует примитивы в объекты String
, так что на строковых примитивах возможно использовать методы объекта String
. В контекстах, когда на примитивной строке вызывается метод или происходит поиск свойства, JavaScript автоматически оборачивает строковый примитив объектом и вызывает на нём метод или ищет в нём свойство.
var s_prim = 'foo';
var s_obj = new String(s_prim);
console.log(typeof s_prim); // выведет 'string'
console.log(typeof s_obj); // выведет 'object'
Строковые примитивы и объекты String
также дают разные результаты при использовании глобальной функции eval()
. Примитивы, передаваемые в eval()
, трактуются как исходный код; объекты же String
трактуются так же, как и все остальные объекты, а именно: возвращается сам объект. Например:
var s1 = '2 + 2'; // создаёт строковый примитив
var s2 = new String('2 + 2'); // создаёт объект String
console.log(eval(s1)); // выведет число 4
console.log(eval(s2)); // выведет строку '2 + 2'
По этим причинам код может сломаться, если он получает объекты String
, а ожидает строковые примитивы, хотя в общем случае вам не нужно беспокоиться о различиях между ними.
Объект String
также всегда может быть преобразован в его примитивный аналог при помощи метода valueOf()
.
console.log(eval(s2.valueOf())); // выведет число 4
StringView
— C-подобном представлении строк на основе типизирванных массивов.Свойства
String.prototype
- Позволяет добавлять свойства к объекту
String
.
Методы
String.fromCharCode()
- Возвращает строку, созданную из указанной последовательности значений Юникода.
String.fromCodePoint()
- Возвращает строку, созданную из указанной последовательности кодовых точек Юникода.
String.raw()
- Возвращает строку, созданную из сырой шаблонной строки.
Общие методы объекта String
Методы экземпляров String
также доступны в Firefox как часть JavaScript 1.6 (который не является частью стандарта ECMAScript) на объекте String
, что позволяет применять эти методы к любому объекту:
var num = 15;
console.log(String.replace(num, /5/, '2'));
Общие методы также доступны для объекта Array
.
Следующая прослойка позволяет использовать их во всех браузерах:
/*globals define*/
// Предполагаем, что все требуемые методы экземпляров String уже присутствуют
// (для них так же можно использовать полифиллы, если их нет)
(function() {
'use strict';
var i,
// Мы могли построить массив методов следующим образом, однако метод
// getOwnPropertyNames() нельзя реализовать на JavaScript:
// Object.getOwnPropertyNames(String).filter(function(methodName) {
// return typeof String[methodName] === 'function';
// });
methods = [
'quote', 'substring', 'toLowerCase', 'toUpperCase', 'charAt',
'charCodeAt', 'indexOf', 'lastIndexOf', 'startsWith', 'endsWith',
'trim', 'trimLeft', 'trimRight', 'toLocaleLowerCase',
'toLocaleUpperCase', 'localeCompare', 'match', 'search',
'replace', 'split', 'substr', 'concat', 'slice'
],
methodCount = methods.length,
assignStringGeneric = function(methodName) {
var method = String.prototype[methodName];
String[methodName] = function(arg1) {
return method.apply(arg1, Array.prototype.slice.call(arguments, 1));
};
};
for (i = 0; i < methodCount; i++) {
assignStringGeneric(methods[i]);
}
}());
Экземпляры объекта String
Свойства
String.prototype.constructor
- Определяет функцию, создающую прототип этого объекта.
String.prototype.length
- Отражает длину строки.
N
- Используется для доступа к символу в позиции N, где N — это целое число между 0 и длиной строки
length
минус один. Эти свойства доступны только для чтения.
Методы
Методы, не относящиеся к HTML
String.prototype.charAt()
- Возвращает символ по указанному индексу.
String.prototype.charCodeAt()
- Возвращает число, представляющее значение символа в Юникоде по указанному индексу.
String.prototype.codePointAt()
- Возвращает неотрицательное целое число, представляющее закодированную в UTF-16 кодовую точку значения по указанной позиции.
String.prototype.concat()
- Объединяет текст двух строк и возвращает новую строку.
String.prototype.includes()
- Определяет, находится ли строка внутри другой строки.
String.prototype.endsWith()
- Определяет, заканчивается ли строка символами другой строки.
String.prototype.indexOf()
- Возвращает индекс первого вхождения указанного значения в объекте
String
, на котором был вызван этот метод, или -1, если вхождений нет. String.prototype.lastIndexOf()
- Возвращает индекс последнего вхождения указанного значения в объекте
String
, на котором был вызван этот метод, или -1, если вхождений нет. String.prototype.localeCompare()
- Возвращает число, указывающее, находится ли образцовая строка до, после или на том же самом месте, что и указанная строка в порядке сортировки.
String.prototype.match()
- Используется для сопоставления строке регулярного выражения.
String.prototype.matchAll()
- Возвращает итератор по всем результатам при сопоставлении строки с регулярным выражением.
String.prototype.normalize()
- Возвращает форму нормализации Юникода для строкового значения.
String.prototype.quote()
Оборачивает строку в двойные кавычки (""
").String.prototype.repeat()
- Возвращает строку. состоящую из элементов объекта, повторённых указанное количество раз.
String.prototype.replace()
- Используется для сопоставления строке регулярного выражения и для замены совпавшей подстроки на новую подстроку.
String.prototype.search()
- Выполняет поиск совпадения регулярного выражения со строкой.
String.prototype.slice()
- Извлекает часть строки и возвращает новую строку.
String.prototype.split()
- Разбивает объект
String
на массив строк, разделёных указанной строкой на подстроки. String.prototype.startsWith()
- Определяет, начинается ли строка символами другой строки.
String.prototype.substr()
- Возвращает указанное количество символов в строке, начинающихся с указанной позиции.
String.prototype.substring()
- Возвращает символы в строке между двумя индексами.
String.prototype.toLocaleLowerCase()
- Приводит символы в строке к нижнему регистру согласно текущей локали. Для большинства языков, метод делает то же самое, что и метод
toLowerCase()
. String.prototype.toLocaleUpperCase()
- Приводит символы в строке к верхнему регистру согласно текущей локали. Для большинства языков, метод делает то же самое, что и метод
toUpperCase()
. String.prototype.toLowerCase()
- Возвращает строковое значение с символами в нижнем регистре.
String.prototype.toSource()
- Возвращает литерал объекта, представляющий указанный объект; вы можете использовать это значениедля создания нового объекта. Переопределяет метод
Object.prototype.toSource()
. String.prototype.toString()
- Возвращает строковое представление указаного объекта. Переопределяет метод
Object.prototype.toString()
. String.prototype.toUpperCase()
- Возвращает строковое значение с символами в верхнем регистре.
String.prototype.trim()
- Обрезает пробельные символы в начале и в конце строки. Часть стандарта ECMAScript 5.
String.prototype.trimLeft()
- Обрезает пробельные символы с левой стороны строки.
String.prototype.trimRight()
- Обрезает пробельные символы с правой стороны строки.
String.prototype.valueOf()
- Возвращает примитивное значение указанного объекта. Переопределяет метод
Object.prototype.valueOf()
. String.prototype[@@iterator]()
- Возвращает новый объект итератора
Iterator
, который итерируется по кодовым точкам строки и возвращает каждую кодовую точку в виде строкового значения.
Методы-обёртки HTML
Эти методы имеют ограниченное применение, поскольку они представляют только ограниченное подмножество доступных тегов и атрибутов HTML.
String.prototype.anchor()
<a name="имя">
(цель гипертекста)String.prototype.big()
<big>
String.prototype.blink()
<blink>
String.prototype.bold()
<b>
String.prototype.fixed()
<tt>
String.prototype.fontcolor()
<font color="цвет">
String.prototype.fontsize()
<font size="размер">
String.prototype.italics()
<i>
String.prototype.link()
<a href="url">
(ссылка на URL)String.prototype.small()
<small>
String.prototype.strike()
<strike>
String.prototype.sub()
}<sub>
String.prototype.sup()
<sup>
Примеры
Пример: преобразование в строку
Объект String
можно использовать как «безопасную» альтернативу методу toString()
, так как хотя он обычно и вызывает соответствующий метод toString()
, он также работает и для значений null
и undefined
. Например:
var outputStrings = [];
for (var i = 0, n = inputValues.length; i < n; ++i) {
outputStrings.push(String(inputValues[i]));
}
Спецификации
Спецификация | Статус | Комментарии |
---|---|---|
ECMAScript 1-е издание. | Стандарт | Изначальное определение. |
ECMAScript 5.1 (ECMA-262) Определение 'String' в этой спецификации. |
Стандарт | |
ECMAScript 2015 (6th Edition, ECMA-262) Определение 'String' в этой спецификации. |
Стандарт |
Совместимость с браузерами
BCD tables only load in the browser