Javascript.RU

String

Создание

a = 'my string'
b = new String(object) // синтаксис устарел и не используется
c = String(object)

Аргументы

string - Необязательный. Любая группа знаков Юникода.


Описание, примеры

Объекты String, как правило, создаются неявно с помощью строковых литералов.

// кавычки любые - без разницы
var str = "string literal"

В строковых литералах можно использовать escape-последовательности для представления особых знаков, которые нельзя напрямую использовать в строках, например символа перевода строки или знаков Юникода. При компиляции сценария каждая escape-последовательность в строковом литерале преобразуется в знаки, которые она представляет.

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

var str = "\u1234"

Объекты String, заданные через кавычки (и называемые "примитивными" строками), немного отличаются от объектов String, созданных с помощью оператора new. Так, например, типом (typeof) данных объекта, созданного при помощи new, является 'object', а не 'string'. И такому объекту можно напрямую назначать дополнительные свойства и методы. В остальном - интерпретатор автоматически превращает примитивные строки в объекты.

"12345".length // 5

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

Доступ к символам осуществляется при помощи метода String#charAt

return 'cat'.charAt(1); // возвратит "a"

Также существует отсутствующий в стандарте ECMA-262 способ - обращение к строке как к массиву:

var str = 'cat'
return str[1] // "a"

В отличие от языков C/PHP/и т.п., однажды созданную строку нельзя изменить: символы можно только считывать, но не менять.

Для изменения строковой переменной применяется присваивание измененной строки:

str = "строка"
str = str.charAt(4) + str.charAt(5) + str.charAt(6) // "ока"

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

Для сравнения строк используются обычные операторы < >.


Методы

split
charCodeAt
String.fromCharCode
charAt
concat
lastIndexOf
search
match
replace
toLowerCase
toUpperCase
toLocaleLowerCase
toLocaleUpperCase
toString
valueOf
substring
slice
indexOf
substr

Свойства

length

Автор: x-yuri, дата: 24 сентября, 2009 - 12:44
#permalink

> Также существует отсутствующий в стандарте ECMA-262 способ - обращение к строке как к массиву

но он не везде работает


Автор: Cooskon, дата: 27 февраля, 2010 - 19:09
#permalink

Илья, добавьте, пожалуйста, в статью, что нельзя изменить конкретный символ в строке, и что для этого, соответственно, нет встроенных функций. Долго искал об этом информацию, пока на форуме не подсказали. Пусть и другие не спотыкаются об это


Автор: Sweet, дата: 29 марта, 2011 - 00:34
#permalink

С какого это перепугу "нельзя изменить конкретный символ в строке"? Как насчет, например, replace???


Автор: Илья Кантор, дата: 29 марта, 2011 - 08:49
#permalink

Да, действительно нельзя. Методы, в том числе replace создают новую строку а не меняют существующую.


Автор: Гость (не зарегистрирован), дата: 18 ноября, 2011 - 00:59
#permalink

Не совсем понял, все-таки нельзя, или нет встроенных функций?

var str = '012345'
str = StringReplace(str, 5, 'q')
alert(str)

  function StringReplace(oldstring, pos, chartoreplase){
     var str1 = oldstring.substring(0,pos-1) + chartoreplase + oldstring.substring(pos, oldstring.length)
  return str1
}

Автор: Гость (не зарегистрирован), дата: 12 июля, 2010 - 13:05
#permalink

Будьте добры, проясните работу со строками в HTML коде, закодированными, как обычно, в UTF-8. Потому что, к примеру, сравнение document.title=="Искомая страница" НЕ сработает до тех пор, пока сам скрипт с этим сравнением не сохранен в формате UTF-8. Я нигде данных об этом не встречал, нашел решение по интуиции чисто.


Автор: Гость (не зарегистрирован), дата: 11 апреля, 2011 - 12:01
#permalink

последний пример не правильный:
"str.charAt(6)" там в строке нет.


Автор: Евгений Сафронов, дата: 8 мая, 2011 - 21:48
#permalink

Согласен с комментарием выше, в примере ошибка с индексами. Правильный вариант:
str = "строка"
str = str.charAt(3) + str.charAt(4) + str.charAt(5) // "ока"


Автор: faiwer, дата: 11 мая, 2011 - 05:25
#permalink

'Е' > 'А' == true
'Ё' > 'А' == false

Sad


Автор: Гость (не зарегистрирован), дата: 26 июня, 2011 - 22:37
#permalink

Счёт символов строки начинается с нуля, а не с единицы.


Автор: Владимир Срг (не зарегистрирован), дата: 1 августа, 2011 - 04:46
#permalink

string.localeCompare('text')


Автор: collapsus (не зарегистрирован), дата: 30 августа, 2011 - 15:16
#permalink

в ИЕ 'cat'[0] вернёт undefined


Автор: Тёмик (не зарегистрирован), дата: 10 сентября, 2011 - 22:19
#permalink

А есть какой-нибудь покороче способ для вставки символа несколько раз подряд?

for (n = 1; n <= 5; n++)
    Str += 'x';

Автор: melky, дата: 11 сентября, 2011 - 14:16
#permalink
alert( new Array(5).join("x") )

Автор: Гость (не зарегистрирован), дата: 20 сентября, 2011 - 11:39
#permalink

только для 5-ти символов надо массив не из 5, а из 6 элементов:

alert(new Array(6).join("x") )

Автор: BiggestSmile (не зарегистрирован), дата: 1 декабря, 2011 - 01:38
#permalink

Доброго времени суток, столкнулся с такой проблемой: Пытаюсь сравнить два элемента массива, на строке с .test выдает ошибку "Объект не поддерживает свойство или метод ".test"". Код js в теле .hta.

Пример (ругается на строку "if (re.test(str))"):

function testinput(re, str)
{
if (re.test(str))
midstring = " содержит ";
else
midstring = " не содержит ";
document.write (str + midstring + re.source);
}

var m1 = ["1", "2", "3"];
var m2 = ["1", "2", "3"];
testinput(m1[1], m2[1]);

из-за чего ошибка и как лечить. Заранее спасибо.


Автор: Shagtv (не зарегистрирован), дата: 8 декабря, 2011 - 11:00
#permalink

Метод test существует только у обьектов RegExp, т.е. регулярных выражений, в данном случае он вызывается у строки. В этом случае надо использовать метод search:

function testinput(re, str){
if (re.search(str)!=-1)
      midstring = " содержит ";
else
      midstring = " не содержит ";
document.write (str + midstring + re.source);
}

Автор: StanWanderer, дата: 23 января, 2012 - 14:38
#permalink

Всем привет!
Вопрос к знающим: имеются ли отличия в использовании строковых литералов, обрамленных " (кавычками) или ' (апострофами)?
Есть ли принципиальная разница между:

var str = "someString";

и

var str = 'someString';

?


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
1 + 11 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Реклама
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние обсуждения на форуме
Forum
Последние комментарии