String

Baseline Widely available *

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

* Some parts of this feature may have varying levels of support.

Объект 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():

js
return "кот".charAt(1); // вернёт "о"

Другим способом (введённым в ECMAScript 5) является рассмотрение строки как массивоподобного объекта, в котором символы имеют соответствующие числовые индексы:

js
return "кот"[1]; // вернёт "о"

При доступе к символам посредством нотации с квадратными скобками, попытка удалить символ, или присвоить значение числовому свойству закончится неудачей, поскольку эти свойства являются незаписываемыми и ненастраиваемыми. Смотрите документацию по методу Object.defineProperty() для дополнительной информации.

Сравнение строк

Разработчики на C имеют для сравнения строк функцию strcmp(). В JavaScript вы просто используете операторы меньше и больше:

js
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 автоматически оборачивает строковый примитив объектом и вызывает на нём метод или ищет в нём свойство.

js
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 трактуются так же, как и все остальные объекты, а именно: возвращается сам объект. Например:

js
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().

js
console.log(eval(s2.valueOf())); // выведет число 4

Свойства

String.length

Хранит длину строки. Только для чтения.

Методы

String.fromCharCode()

Возвращает строку, созданную из указанной последовательности значений Юникода.

String.fromCodePoint() Экспериментальная возможность

Возвращает строку, созданную из указанной последовательности кодовых точек Юникода.

String.raw() Экспериментальная возможность

Возвращает строку, созданную из сырой шаблонной строки.

Общие методы объекта String

Методы экземпляров String также доступны в Firefox как часть JavaScript 1.6 (который не является частью стандарта ECMAScript) на объекте String, что позволяет применять эти методы к любому объекту:

js
var num = 15;
console.log(String.replace(num, /5/, "2"));

Общие методы также доступны для объекта Array.

Следующая прослойка позволяет использовать их во всех браузерах:

js
/*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 можно использовать как «безопасную» альтернативу методу toString(), так как хотя он обычно и вызывает соответствующий метод toString(), он также работает и для значений null и undefined. Например:

js
var outputStrings = [];
for (var i = 0, n = inputValues.length; i < n; ++i) {
  outputStrings.push(String(inputValues[i]));
}

Спецификации

Specification
ECMAScript® 2025 Language Specification
# sec-string-objects

Совместимость с браузерами

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
String
[Symbol.iterator]
String() constructor
anchor
Deprecated
at
big
Deprecated
blink
Deprecated
bold
Deprecated
charAt
charCodeAt
codePointAt
concat
endsWith
fixed
Deprecated
fontcolor
Deprecated
fontsize
Deprecated
fromCharCode
fromCodePoint
includes
indexOf
isWellFormed
italics
Deprecated
lastIndexOf
length
link
Deprecated
localeCompare
locales parameter
options parameter
match
matchAll
normalize
padEnd
padStart
raw
repeat
replace
replaceAll
search
slice
small
Deprecated
split
startsWith
strike
Deprecated
sub
Deprecated
substr
Deprecated
substring
sup
Deprecated
toLocaleLowerCase
locales parameter
toLocaleUpperCase
locales parameter
toLowerCase
toString
toUpperCase
toWellFormed
trim
trimEnd
trimStart
Unicode code point escapes \u{xxxxxx}
valueOf

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Partial support
Partial support
No support
No support
Deprecated. Not for use in new websites.
See implementation notes.
Uses a non-standard name.
Has more compatibility info.

Смотрите также