Тип данных String. Его особенности, свойства, методы. Строковые шаблоны. — КиберПедия 

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Тип данных String. Его особенности, свойства, методы. Строковые шаблоны.

2017-06-29 251
Тип данных String. Его особенности, свойства, методы. Строковые шаблоны. 0.00 из 5.00 0 оценок
Заказать работу

В JavaScript любые текстовые данные являются строками. Не существует отдельного типа «символ», который есть в ряде других языков. Внутренним форматом строк, вне зависимости от кодировки страницы, является 16-разрядный Юникод (Unicode).

Создание строк

Строки создаются при помощи двойных или одинарных кавычек:

let text = "моя строка";

let anotherText = 'еще строка';

 

Специальные символы

Строки могут содержать специальные символы. Самый часто используемый из таких символов – это «перевод строки».

Есть и более редкие символы, вот их список:

Специальные символы
Символ Описание
\b Backspace
\f Form feed
\n New line
\r Carriage return
\t Tab
\uNNNN Символ в кодировке Юникод с шестнадцатеричным кодом `NNNN`. Например, `\u00A9` - юникодное представление символа копирайт ©

 

Экранирование специальных символов

Экранирование служит исключительно для правильного восприятия строки JavaScript. В памяти строка будет содержать сам символ без '\'.

\0 — ноль-символ

\' — одинарная кавычка

\" — двойная кавычка

\\ — обратный слэш

\b — забой

\f — разрыв страницы

\n — новая строка

\r — возврат каретки

\t — табуляция

\v — вертикальная табуляция

\uFFFF (4 шестнадцатеричных цифры) — символ по Unicode-коду

\u{F} … \u{FFFFFF} — расширенный юникод

\xFF — символ по коду ASCII Latin-1

 

Многострочность

 

Строка однострочная. Для многострочной можно в конце поставить «`\`» (перевод строки игнорируется):

 

'Пример текста\

занимающего две строки'

=== 'Пример текста занимающего две строки' // true

 

Или использовать шаблоны (перевод строки учитывается):

 

`Пример текста

занимающего две строки`

=== 'Пример текста\nзанимающего две строки' // true

 

Операции

 

Объединение строк — оператор «+»:

 

'Hello' + ' world' // 'Hello world'

 

Сравнение происходит побуквенно по алфавиту (таблице символов):

 

'abc' === 'abc'

'abc' === 'a' + 'b' + 'c'

'a' < 'b' // true

'c' < 'b' // false

'abcd' < 'abcd' // false

'abcd' < 'abdc' // true

 

Методы и свойства

Свойство length

Одно из самых частых действий со строкой – это получение ее длины:

‘text’.length; // 4

 

Доступ к символам

 

charAt(index: number): string

 

— получить символ в заданной позиции (от нуля). Если запрошенная позиция выходит за пределы строки, вернётся пустая строка.

 

'text'.charAt(1); // 'e'

'text'.charAt(-1); // ''

'text'.charAt(10); // ''

'text'.charAt(0); // 't'

Также для доступа к символу можно использовать квадратные скобки:

‘text’ [0]; // "t"

Разница между этим способом и charAt заключается в том, что если символа нет – charAt выдает пустую строку, а скобки – undefined:

"".charAt(0); // пустая строка

"" [0]; // undefined

Изменения строк

Содержимое строки в JavaScript нельзя изменять. Нельзя взять символ посередине и заменить его. Как только строка создана – она такая навсегда.

Можно лишь создать целиком новую строку и присвоить в переменную вместо старой, например:

let str = "строка";

str = str[3] + str[4] + str[5];

alert(str); // ока

Смена регистра

Методы toLowerCase() и toUpperCase() меняют регистр строки на нижний/верхний:

"Интерфейс".toUpperCase(); // ИНТЕРФЕЙС

Пример ниже получает первый символ и приводит его к нижнему регистру:

"Интерфейс" [0].toLowerCase(); // 'и'

Поиск подстроки

indexOf(searchString: string, fromIndex?: number)

- возвращает позицию, на которой находится подстрока или -1, если ничего не найдено. Например:

'test text'.indexOf('t') // 0

'test text'.indexOf('t', 1) // 3

'test text'.indexOf('te', 1) // 5

'test text'.indexOf('z') // -1

 

lastIndexOf(searchString: string, toIndex?: number)

 

— находит последнее вхождение подстроки `searchString` в строке до позиции `toIndex` (0..длина), если указана, иначе — до конца строки. Возвращается позиция первого символа (от нуля), или «-1», если вхождения нет.

 

'test text'.lastIndexOf('t') // 8

'test text'.lastIndexOf('t', 7) // 5

'test text'.lastIndexOf('te') // 5

'test text'.lastIndexOf('z') // -1

 

includes(searchString: string, position?: number): Boolean

 

— проверяет вхождение подстроки `searchString` в строке, начиная от позиции `position` (0..длина), если указана, иначе — с начала строки. Возвращает `true`, если подстрока найдена, иначе — `false`.

 

'test text'.includes('t') // true

'test text'.includes('st') // true

'test text'.includes('st', 3) // false

'test text'.includes('z') // false

 

endsWith(searchString: string, endPosition?: number): Boolean

 

— проверяет, что строка завершается подстрокой `searchString`. Если указано `endPosition`, то строка считается данной длины, иначе поиск идёт до конца строки.

 

'test text'.endsWith('t') // true

'test text'.endsWith('x') // false

'test text'.endsWith('st', 4) // true

'test text'.endsWith('st', 5) // false

 

Взятие подстроки: substr, substring, slice

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

substring(start [, end])

- возвращает подстроку с позиции start до, но не включая end. Если аргумент end отсутствует, то идет до конца строки.

‘stringify’.substring(0,1)); // "s"

‘stringify’.substring(2)); // "ringify"

substr(start [, length])

- первый аргумент имеет такой же смысл, как и в substring, а второй содержит не конечную позицию, а количество символов. Если второго аргумента нет – подразумевается «до конца строки».

‘stringify’.substr(2,4); // ring

slice(start [, end])

- возвращает часть строки от позиции start до, но не включая, позиции end.

Отрицательные аргументы

Различие между substring и slice – в том, как они работают с отрицательными и выходящими за границу строки аргументами:

substring(start, end)

Отрицательные аргументы интерпретируются как равные нулю. Слишком большие значения усекаются до длины строки:

"testme".substring(-2); // "testme", -2 становится 0

Кроме того, если start > end, то аргументы меняются местами, т.е. возвращается участок строки между start и end:

"testme".substring(4, -1); // "test"

// -1 становится 0 -> получили substring(4, 0)

// 4 > 0, так что аргументы меняются местами -> substring(0, 4) = "test"

 

slice(start [, end])

Отрицательные значения отсчитываются от конца строки:

"testme".slice(-2); // "me", от 2 позиции с конца

"testme".slice(1, -1); // "estm", от 1 позиции до первой с конца.

Кодировка Юникод

charCodeAt(index: number): number

 

— возвращает числовой Unicode-код символа (0…65535). При выходе за диапазон возвращает NaN.

 

'text'.charCodeAt(1) // 101

'text'.charCodeAt(10) // NaN

 

codePointAt(position: number): number | undefined

 

— возвращает числовой Unicode-код символа с подержкой суррогатных пар (два 16-битных значения, где каждое значение лежит в диапазоне от 0xD800 и до 0xDFFF; другими словами, два «типа символа» образуют один «настоящий» символ). Если в указанной позиции нет символа, возвращается `undefined`.

 

'text'.codePointAt(1) // 101

'text'.codePointAt(10) // undefined

'\uD800\uDC00'.codePointAt(0) // 65536

 

Другие методы

 

concat(...strings: string[]): string

 

— объединение двух или более строк. Объединение через оператор «+» является предпочтительнее.

 

't'.concat('e', 'x', 't') // 'text'

 

localeCompare(compareString: string): number

 

— сравнивает две строки. Если compareString больше — результат отрицательный, меньше — положительный, равны — нулевой.

 

'a'.localeCompare('b') // -1

'a'.localeCompare('c') // -1

'ё'.localeCompare('я') // -1

 

trim(): string

 

— удаляет интервальные символы по сторонам строки (пробелы, табуляцию, переводы строк).

 

' test \t\n '.trim() === 'test'

 

search(regexp: string | RegExp): number

 

— находит первое совпадение регулярного выражения со строкой. Глобальный поиск не осуществляет (флаг «g» не учитывается).

 

'test text'.search(/.t/) // 2

'test text'.search('.t') // 2

'test text'.search(/^.t/) // -1

 

match(regexp: string | RegExp): RegExpMatchArray | null

 

— возвращает перечень совпадений регулярного выражения по строке.

 

'test text'.match(/.t/g) // [ 'st', ' t', 'xt' ]

 

replace(searchValue: string | RegExp, replaceValue: string | Function)

 

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

 

Строка замены понимает следующие мета-последовательности:

 

* `$$` — символ «$»

* `$&` — совпавшая подстрока

* `$`` — часть строки до совпадения

* `$'` — часть строки после совпадения

* `$1`, `$2`, … — результат совпадения соответствующего подшаблона регулярного выражения

 

Функция замены принимает следующие аргументы:

 

* math — совпавшая подстрока

* p1, p2, … — результат совпадения соответствующего подшаблона регулярного выражения

* offset — позиция подстроки в строке

* string — исходная строка

 

'test text'.replace('te', 'be') // 'best text'

'test text'.replace(/te/, 'be') // 'best text'

'test text'.replace(/te/g, 'be') // 'best bext'

'test text'.replace(' ', '[$`]<$&>($\')') // 'test[test]< >(text)text'

 

split([separator][, limit])

 

— разделяет строку на массив подстрок.

separator — разделитель строки, может быть строкой или регулярным выражением.

limit — устанавливает ограницение на количество разделяемых частей.

 

'test text'.split() // [ 'test text' ]

'test text'.split('') // ['t', 'e', 's', 't', ' ', 't', 'e', 'x', 't']

'test text'.split(' ') // [ 'test', 'text' ]

'test text'.split('t') // [ '', 'es', ' ', 'ex', '' ]

'test text'.split('t', 3) // [ '', 'es', ' ' ]

 

String.fromCharCode(num1,..., numN)

 

— строка из кодов символов.

 

String.fromCharCode(65, 66, 67) // ABC

 

Строковые шаблоны

Добавлен новый вид кавычек для строк:

let str = `обратные кавычки`;

Основные отличия:

ü Поддерживают многострочность

`моя

многострочная

строка`;

ü Можно вставлять выражения при помощи ${…}

`2 + 3 = ${2 + 3}`; // 2 + 3 = 5

При помощи ${…} можно вставлять как значение переменной, так и более сложные выражения, которые могут включать в себя операторы, вызовы функций и т.п. Такую вставку называют «интерполяцией».

ü Поддерживают тег-функцию

Название этой функции ставится перед первой обратной кавычкой:

let str = func`моя строка`;

Эта функция будет автоматически вызвана и получит в качестве аргументов строку, разбитую по вхождениям параметров ${…} и сами эти параметры.

function myTag(strings,...values)

{

console.log(strings);

console.log(strings.raw);

console.log(values);

 

return `[${strings.join('][')}]`;

}

myTag`Test \u263A ${1} template ${2} literal ${3} string`

В strings.raw содержатся участки строки в «изначально введённом» виде. То есть, если в строке находится \n или \u1234 или другое особое сочетание символов, то оно таким и останется.


Поделиться с друзьями:

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.059 с.