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
toLowerCase
toUpperCase
toLocaleLowerCase
toLocaleUpperCase
toString
valueOf
substring
slice
indexOf
substr
replace

Свойства

length

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

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

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


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

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


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

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


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

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


Автор: Гость (не зарегистрирован), дата: 18 ноября, 2011 - 01: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 - 14:05
#permalink

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


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

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


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

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


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

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

Sad


Автор: va4ok (не зарегистрирован), дата: 29 января, 2013 - 18:19
#permalink

Всему виной неплотная кодировка русского алфавита где буква Ёё выходит из сравнения - так везде.


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

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


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

string.localeCompare('text')


Автор: blackswanny, дата: 28 ноября, 2012 - 17:03
#permalink

да, важное замечание localeCompare - единственный кошерный способ сравнивать строки, пользоваться str1 "<" str2,str1 ">" str2 не рекомендуется


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

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


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

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

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

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

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

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

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

Автор: BiggestSmile (не зарегистрирован), дата: 1 декабря, 2011 - 02: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 - 12:00
#permalink

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

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

Автор: Гость (не зарегистрирован), дата: 29 июля, 2012 - 09:27
#permalink

Уважаемый BiggestSmile , test() является методом класса RegExp.И если Вам необходимо проверить выражение именно на true/false ваша переменная "re" должна содержать регулярное выражение например

/\bjavascript\b/i

,а вы пытаетесь применить метод к строковому типу данных.И Тогда ваш код перестанет ругаться.


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

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

var str = "someString";

и

var str = 'someString';

?


Автор: Гость (не зарегистрирован), дата: 7 февраля, 2012 - 12:15
#permalink

Насколько мне известно, разницы нет никакой...


Автор: Гость (не зарегистрирован), дата: 5 апреля, 2012 - 16:38
#permalink

Как сделать это корректно помогите пожалуйста?
Создайте форму 2-х полей, запрашивающую у пользователя имя и фамилию. Запишите и то, и другое в одну переменную, выведите ее на экран.
С помощью методов объекта String для работы с RegExp переставьте, местами фамилию и имя и разделив их запятой.
Выведите на экран результат.
Например, если пользователь ввел Вася Васечкин, то в итоге на экране должно получиться «Васечкин, Вася».


Автор: Гость (не зарегистрирован), дата: 29 июля, 2012 - 09:36
#permalink

Это можно сделать например так...
сделать регулярное выражение по нахождению "пробела" str.search("ругулярное выражение")... если нашел он возвращает позицию первого совпадения, далее обрезаем slice() нашу переменную от позиции совпадения до конца строки . и записываем в массив. далее обрезаем от 0 до позиции совпадения и записываем в массив. Ну и остается вывести массив методом join() в виде аргумента указав ", "


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

Не очень эффективно, можно все зделать с помощью RegExp
Например самый простой варинат


"name lastname".replace(/(\S+)\s(\S+)/, "$2, $1") //"lastname, name"

можно использовать границу слов \d но это работает только для латинского алфавита.
В примере имя и фамилию надо тримать или усложнить regexp


Автор: Dimm (не зарегистрирован), дата: 15 января, 2013 - 17:42
#permalink

Как вывести все свойства и методы - объекта Стринг? через for in не получилось.


Автор: xvova (не зарегистрирован), дата: 20 апреля, 2014 - 15:12
#permalink

с чем быстрее работает скрипт?
с массивом [a,b,c,d,e,f,g,h]
или со строкой "abcdefgh" через str[i] или метод .charAt(i)


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

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
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 + 0 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Реклама
Содержание

Учебник javascript

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

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

Интерфейсы

Все об AJAX

Оптимизация

Разное

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

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