Строковые переменные и объект String

Будем считать, что вы уже ознакомились с переменными типа "String" и последующий материал не вызовет никаких трудностей.

Начнём с простого, т. е. с простых строк. Как вы уже знаете, в Java Script совсем не обязательно заранее объявлять тип переменной, а потому любая из них в любой момент времени может содержать строковое значение. Это значение может содержать один или несколько символов. Строка может содержать любые символы и должна быть заключена в кавычки. Допускается использование любых типов кавычек, как двойных, так и одинарных. Это позволяет включать в строку, собственно, сами символы кавычек. Вот простой пример. Надо вывести эту строку с помощью сценария.

	<div align="center"> Любой текст </div>
	

Сама эта строка уже содержит пару кавычек. Как же быть, как присвоить переменной txt это значение? Очень просто. Используем другой тип кавычек.

	txt=' <div align="center" > Любой текст </div>';
	
или так
	txt=">div align='center' < Любой текст >/div<";
	

Чтобы не путаться в последующем, лучше сразу выбрать какой-то один вариант и использовать его повсеместно. Итак, главное, чтобы строку окружали кавычки одного типа.

Поедем дальше.

Часто требуется создавать довольно длинные строки, которые могут содержать целые HTML-страницы. Понятно, что писать такую строку за один раз довольно сложно, а под час просто невозможно. Естественно, существует способ объединять короткие строки в более длинные. Объединение или сложение строк обзывается умным словом "конкатенация". Удобно использовать короткие строки, чтобы самому не запутаться и не ошибиться. Да и код получается легче читаемым.

Например.

	var doc="";
	doc+="<HTML><HEAD><TITLE>Заголовок</TITLE></HEAD>";
	doc+="<BODY><H1>Верблюды идут на север</H1>";
	doc+="<P>Содержание первого абзаца. </P>";
	
ну и так далее….

С каждой новой строчкой к переменной doc добавляется новый блок данных. Это можно продолжать, пока туда не залезет вся страница или то, что вам требуется.

Со статическими строками всё ясно, но зачастую требуется вставлять динамически создаваемые переменные в выводимые страницы. Типичный пример этого - приветствие зарегистрированного пользователя. Приведём пример. К строке надо прибавить имя, введённое пользователем в диалоговом окне и сохранённое в переменной name

	name=window.prompt("Как звать-то тебя?");
	var privet="Так вот ты какой, северный "+name+"!";
	window.alert(privet);
	

Будьте внимательны. В таких случаях легко случайно пропустить одну из кавычек. Результат будет непредсказуем. Этого легко избежать, если проставлять кавычки сразу парами, а потом вписывать в них содержимое. Также помощь может оказать редактор с подсветкой синтаксиса. Ещё можно пропустить пробелы или знаки пунктуации. Тогда строка выводится без разделителя и словасливаютсяводно. Читать такой текст не очень-то удобно. Мелочь, а не приятно.

Как и в других языках, в Java Script можно использовать специальные символы в строках. Это такие символы, как возврат каретки, новая строка, кавычки и прочие. Для правильной интерпретации таких символов браузером, надо проставлять перед ними обратную косую черту (слеш) "\".

Вот наиболее распространённые символы.

\" –   Двойная кавычка
\' –   Апостроф
\\ –   Обратная косая черта
\b –   Символ Backspace
\t –   Табуляция
\n –   Новая строка
\r –   Возврат каретки
\f –   Символ подачи страницы

Просьба не путать строки, отображаемые в объектах TEXTAREA или диалоговых окнах со строками HTML-кода. В HTML-строках, надо использовать стандартные дескрипторы (<BR> - перевод строки; <P> - начало нового параграфа), а не внутреннее представление специальных символов.

Протестируйте следующие строки с помощью браузера в различных ситуациях.

	var msg="It\'s my life";
	var msg="Первая строка\nВторая строка\nТретья строка";

И ещё раз напоминаю, что спецсимволы применяются для передачи CGI-сценариям или в диалоговых окнах типа alert, prompt.

Вот мы и рассмотрели простые строки. Далее рассмотрим объект String с его наиболее часто используемыми свойствами и методами.

Свойства Методы
constructor
length
prototype*
anchor()
big()
blink()
bold()
charAt()
charCodeAt()
concat()
fixed()
fontcolor()
fontsize()
fromCharCode()*
indexOf()
italics()
lastlndexOf()
link()
localeCompare()
match()
replace()
search()
slice()
small()
split ()
strike()
sub()
substr()
substring()
sup()
toLocaleLowerCase()
toLocaleUpperCase()
toLowerCase()
toString()
toUpperCase()
valueOf()

Синтаксис

Создание строкового объекта:

var myString = new String("characters") 

Доступ к свойствам и методам статического объекта String:

String.свойство | метод ([параметры])

Доступ к свойствам и методам строкового объекта:

строка. свойство | метод ([параметры])

Описание объекта

JavaScript различает строковые значения и строковые объекты. И те, и другие используют одинаковые методы, поэтому обычно для присвоения переменной строкового значения нет необходимости создавать объект (конструктором String()). Для этого требуется лишь обычная операция присвоения (var myString = "fred").

Различия проявляются там, где используется "объектность" строкового элемента. Подробно об этом рассказано при обсуждении свойства string.prototype далее. Кроме того, использование полноценного строкового объекта может понадобиться при передаче данных Java-аплету. Если оказывается, что аплет не воспринимает строковое значение как тип данных String, следует создать новый объект (с помощью конструктора JavaScript) и передать его аплету.

В сценариях часто возникает необходимость обработки строковых данных. Кроме конкатенации строк зачастую требуется извлекать подстроки, удалять части строк или заменять их другим текстом. В отличие от многих языков написания сценариев JavaScript практически не имеет встроенных средств обработки строк. Это значит, что (если только вы не воспользуетесь регулярными выражениями, поддерживаемыми в браузерах NN4+ и IE4+) методы обработки строки необходимо программировать самостоятельно. Далее в этой главе приведен исходный код нескольких функций, которые полностью совместимы с более ранними версиями браузеров.

При работе со строковыми значениями каждое из них необходимо представлять в качестве объекта, имеющего свойства и методы, как и любой другой объект JavaScript. В последних версиях JavaScript определены несколько свойств и множество методов для работы со строковыми значениями (и одно дополнительное свойство статического объекта String, которое всегда присутствует в окне браузера). Синтаксис вызова строковых методов такой же, как и методов любого другого объекта:

объектString.method()

Может показаться странным, что частью ссылки на строковый объект может быть любое выражение, результатом выполнения которого является строка, содержащая обычные строки, переменные, методы или функции, возвращающие строки, или другие свойства объекта. Поэтому все приведенные ниже примеры вызова метода toUpperCase() работают одинаково:

"george burns".toUpperCase()
yourName.toUpperCase()  
// yourName - строковая переменная 
window.prompt("Enter your name","").toUpperCase() 
document.forms[0].entry.value.toUpperCase()
// entry - текстовое поле объекта

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

Поэтому для изменения содержимого строковой переменной (влияющей на результат выполнения метода) необходимо воспользоваться оператором присвоения:

yourName = yourName.toUpperCase()  //

значение переменной теперь включает только прописные буквы.

Свойства

constructor

Значение: ссылка на функцию
Чтение/Запись

Совместимость
Netscape Navigator 6+ Internet Explorer 5.5+
+ +

Свойство constructor является ссылкой на функцию, вызванную для создания текущей строки. Для естественного строкового объекта в JavaScript функцией-конструктором является String().

При создании новой строки конструктором new String() типом значения, возвращаемым им, является object (т.е. оператор typeof возвращает значение object). Поэтому свойством constructor можно воспользоваться для проверки "строковоcти" объекта:

if  (typeof someValue == "object" )   {
if  (someValue.constructor == String)   (
// операторы обработки объекта string

Хотя это свойство предназначено для чтения и записи, а свойству String.prototype можно присвоить другое значение конструктора, естественное поведение объекта String заключается в использовании старого конструктора.

Смотри также свойство prototype.


length

Значение: целочисленное
Только для чтения

Совместимость
Netscape Navigator 6+ Internet Explorer 5.5+
+ +

Наиболее часто используемым свойством строкового объекта является length. Оно содержит длину строки. Обращение к нему происходит так же, как к свойству length любого другого объекта:

string.length

Это целочисленное значение равно количеству символов в строке. Символами также считаются пробелы и знаки пунктуации. Все специальные символы, начинающиеся с обратной косой черты, считаются одиночными, включая символы новой строки и табуляции. Вот несколько примеров:

"Lincoln".length
 // результат = 7 
"Four score".length 
// результат =10 
"One\ntwo".length 
// результат = 7 
"".length
 // результат = 0

Свойство length часто используется, например, при обработке строк в циклах.


prototype

Значение: объект
Чтение/Запись

Совместимость
Netscape Navigator 6+ Internet Explorer 5.5+
+ +

Строковые объекты, создаваемые конструктором new String ("строка"), являются более значимыми объектами, чем обычные переменные, которым присвоены строковые значения. Разумеется, создавать такие объекты для всех строк в сценарии нет необходимости. Однако в некоторых случаях они могут оказаться полезными. Например, значения в переменных могут стать некорректными при попытке сохранения информации в других фреймах или окнах. Используя конструктор строкового объекта, можно быть уверенным в том, что строковое значение будет доступно другим фреймам.

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

<HTML>
<HEAD>
<TITLE>
  String Object Prototype
</TITLE>
<SCRIPT LANGUAGE="JavaScriptl.1">
function makeItHot()  
{
  return "<FONT COLOR='red'>"+this.toString()+"</FONT>" 
}
String.prototype.hot = makeItHot 
</SCRIPT> 
<BODY>
<SCRIPT LANGUAGE-"JavaScriptl.1">
document.write("<Hl>This site is on "+"FIRE".hot()+"!!</Н1>") 
</SCRIPT> 
</BODY> 
</HTML>

Функция makeItHot() накапливает строковые данные, которые возвращаются в объект, когда она вызывается как метод. Ключевое слово this указывает на объект, вызвавший функцию, который преобразуется в строку для последующей конкатенации. В разделе тела страницы прототип метода вызывается так же, как и существующие методы объекта String, превращающие строки в дескрипторы HTML (они обсуждаются далее)

.

В следующих разделах методы строкового объекта разделены на две категории. В первой описываются методы синтаксической обработки, во второй - методы форматирования, используемые для вывода текста в новые документы или другие фреймы.

Методы синтаксической обработки

string.charAt(индекс)

Возвращаемое значение: односимвольная строка

Совместимость
Netscape Navigator 6+ Internet Explorer 5.5+
+ +

Метод string.charAt() используется для чтения символа, находящегося в определенной позиции в строке. Аргументом метода является индекс. Индекс первого символа равен 0. Для получения последнего символа нужно воспользоваться комбинацией строковых методов:

myString.charAt(myString.length-1)

Если сценарию требуется получить несколько символов, используется метод string.substring(). Попытка применения этого метода для извлечения одного символа является распространенной ошибкой, - метод string.charAt() работает гораздо эффективнее.

См. также методы string.lastIndexOf(), string.indexOf(), string.substring().


string.charCodeAt([индекс])
String.fromCharCode(ном1 [, ном2 [, ... номn]])

Возвращаемое значение: целочисленный код символа; строка, конкатенированная из символов, чьи коды указаны как аргументы.

Совместимость
Netscape Navigator 6+ Internet Explorer 5.5+
+ +

Преобразование символов в числовые эквиваленты представляет собой давнюю традицию в программировании. В течение долгого времени применялся стандарт ASCII, описывающий символы английского алфавита, буквенно-цифровые символы и символы пунктуации,- всего 128 значений (от 0 до 127). Расширенная версия этого стандарта включает 256 символов. Их точное значение зависит от операционной системы. Обычно это дополнительные символы других романских языков. Для того чтобы обеспечить поддержку нероманских и пиктографических языков, был разработан стандарт Unicode, поддерживающий несколько тысяч различных символов.

В JavaScript преобразование символов в коды достигается с помощью строковых методов. Допустимые значения зависят от конкретной версии браузера. NN4 работает только с 256 символами стандарта ISO-Latin-I; NN6 и IE4+ поддерживают систему Unicode.

Два метода, выполняющих преобразование, синтаксически работают по-разному. Первый, string.charCodeAt(), преобразует один символ строки в его числовой эквивалент. Конвертируемая строка указывается как объект перед именем метода - это может обычная строка в кавычках или любое выражение, результатом которого является строка. Если аргумент метода не указан, возвращается код первого символа строки. Для обработки другого символа следует указать его индекс (индекс первого символа равен 0). Например:

"abc".charCodeAt()   
 // результат - 97 
"abc".charCodeAt(0)   
 // результат = 97 
"abc".charCodeAt(1)    
// результат = 98

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

Для преобразования числовых значений в соответствующие им символы используется метод String.fromCharCode(). Обратите внимание, что объект, вызывающий метод, является статическим объектом String, а не строковым значением. В качестве аргументов можно указать одно или несколько целочисленных значений, разделенных запятыми. В процессе преобразования метод объединяет все символы в одну строку, как в следующем примере:

 String.fromCharCode(97,  98,  99)   
 // результат "abc"

string.concat(строка2)

Возвращаемое значение: комбинация строк.

Совместимость
Netscape Navigator 6+ Internet Explorer 5.5+
+ +

Оператор сложения с присвоением (+=) в JavaScript обеспечивает удобный способ конкатенации строк. Современные браузеры поддерживают строковый метод, выполняющий ту же задачу. Строка, к которой добавляется текст, является объектом или значением, вызывающим метод. Добавляемая строка является аргументом метода, как показано в следующем примере:

"abc".concat("def")    
// результат:  "abcdef"

Как и оператор сложения с присвоением, метод concat() ничего не знает об окончаниях слов. Поэтому, если требуется добавить пробел, его следует указывать явно.


string.indexOf(строкаПоиска [, начИндекс])

Возвращаемое значение: индекс первого экземпляра подстроки searchString в строке.

Совместимость
Netscape Navigator 6+ Internet Explorer 5.5+
+ +

Метод JavaScript indexOf(), наподобие строковых функций в других языках, возвращает индекс первого символа указанной подстроки в строке. Дополнительный аргумент метода указывает позицию начала поиска. Возвращаемое значение всегда отсчитывается от начала строки - от 0, как и для других строковых методов. Если в строке нет данной подстроки, метод возвращает -1. Этот метод используется для поиска экземпляров подстроки в строке.

См. также методы string.lastIndexOf(), string.charAt(), string.substring().


string.lastIndexOf(строкаПоиска [, начИндекс])

Возвращаемое значение: индекс последнего символа подстроки searchString в строке.

Совместимость
Netscape Navigator 6+ Internet Explorer 5.5+
+ +

Метод string.lastIndexOf() тесно связан с методом string.indexOf(). Разница заключается в том, что этот метод начинает поиск с конца строки (string.length -1) и проводится в обратном направлении. Все значения индексов отсчитываются от 0 - начала строки. Для сравнения результатов используйте те же значения, что и в примерах с string.indexOf(). В строках, которые содержат только один экземпляр требуемой подстроки, методы возвращают одинаковые результаты; там же, где имеется несколько искомых экземпляров, результаты методов существенно различаются.

См. также методы string.indexOf(), string.charAt(), string.substring().


string.localeCompare(строка2)

Совместимость
Netscape Navigator 6+ Internet Explorer 5.5+
+ +

Метод localeCompare() позволяет сценарию сравнивать строки в кодировке Unicode, т.е., учитывая используемый браузером язык общения с пользователями. Необходимость в этом методе возникает лишь в определенных языковых системах (например турецкой). Если строки являются равными, метод возвращает нулевое значение. Если строковое значение, для которого вызван метод (находящееся слева от точки) меньше (подсчитывается сумма кодов символов), чем строка-аргумент, метод возвращает отрицательное целое число; в ином случае - положительное.

Стандарт ЕСМА предполагает, что абсолютное значение отрицательного и положительного результата зависит от разработчиков браузера. NN6 подсчитывает сумму Unicode-кодов символов исходной строки и строки аргумента, а затем вычисляет их разность. IE5.5 возвращает просто -1 или 1.

См. также методы string.toLocaleLowerCase(), string.toLocaleUpperCase().


string.match(регВыражение)

Возвращаемое значение: массив строк, удовлетворяющих шаблону

Совместимость
Netscape Navigator 6+ Internet Explorer 5.5+
+ +

Метод string.match() использует объект RegExp (регулярное выражение), появившийся в JavaScript в NN4 и IE4. Исследуемое строковое значение указывается слева от точки, а регулярное выражение - в аргументе метода. Параметр должен быть объектом, созданным одним из двух возможных способов. Если найдено хотя бы одно совпадение, метод возвращает массив строк. В ином случае он возвращает значение null. Каждый элемент массива является копией подстроки, удовлетворяющей регулярному выражению. Этим методом можно воспользоваться для подсчета количества экземпляров определенной подстроки или последовательности символов в данной строке. Поиск позиций подстрок в строке требует применения других методов синтаксического анализа.

См. также: объект RegExp (Этот справочный материал доступен для скачивания в формате PDF).


string.replace(регВыражение, строкаЗамены)

Возвращаемое значение: измененная строка.

Совместимость
Netscape Navigator 6+ Internet Explorer 5.5+
+ +

Регулярные выражения широко используются в операциях поиска и замены. Метод string.replace() в JavaScript обеспечивает простой способ выполнения таких операций.

Процесс поиска и замены требует наличия трех компонент. Первой является исходная строка, второй - регулярное выражение, с которым проводится сравнение, а третьей - подстрока, заменяющая исходный блок текста. В методе string.replace() исходная строка указывается слева от точки. Она может быть и обычной строкой в кавычках. Регулярное выражение задается в первом аргументе метода, а строка-заменитель - во втором.

Определение регулярных выражений указывает, как нужно проводить замену: только в одном совпадении или во всех. Если в конце регулярного выражения добавить параметр g, метод replace() проводит глобальные поиск и замену.

Если вы знаете, как работать с регулярными выражениями, вам будет достаточно просто пользоваться методом string.replace(). Использование регулярных выражений делает операции поиска и замены более мощными. Рассмотрим монолог Гамлета:

То be, or not to foe: that is the question: 
Whether 'tis nobler in the mind to suffer

Если нужно заменить оба экземпляра "be" на "exist", то это можно сделать с помощью оператора

var regexp = /be/g
soliloquy.replace(regexp,  "exist")

Однако этот подход не позволяет убедиться, является ли комбинация букв "Ь" и "е" отдельным словом. А что, например, если исходная строка содержит слова "being" или "saber"? Приведенный выше пример заменяет буквы "be" и в этих словах.

Регулярные выражения поддерживают специальные символы, которые облегчают решение этой проблемы. В приведенном выше примере проводится поиск слова "be". К искомому выражению необходимо добавить символы, ограничивающие слово (специальные символы \b), например:

var regexp = /\bbe\b/g
soliloquy.replace(regexp,  "exist")

В этом синтаксисе учитывается тот факт, что после первых двух символов "be " введены знаки пунктуации, а не только пробелы. Более подробно о синтаксисе регулярных выражений рассказано в справочном материале по регулярным выражениям (формат PDF).

См. также: метод string.match().


string.search(регВнражение)

Возвращаемое значение: целочисленное смещение.

Совместимость
Netscape Navigator 6+ Internet Explorer 5.5+
+ +

Результаты метода string.search() напоминают результаты метода string.indexOf(). В обоих случаях возвращается индекс первого экземпляра подстроки в исходной строке или -1, если такового не обнаружено. Разница, конечно же, заключается в том, что метод string.search() позволяет использовать в строке поиска регулярные выражения.

См. также: метод string.match().


string.slice(начИндекс [, конИндекс])

Возвращаемое значение: строка.

Совместимость
Netscape Navigator 6+ Internet Explorer 5.5+
+ +

Метод string.slice() похож на string.substring(): они оба позволяют извлечь из строки подстроку (не изменяя исходную). Преимущество string.slice() заключается в том, что в этом методе можно указать индекс, отсчитываемый не от начала, а от конца строки.

Для извлечения подстроки, которая заканчивается за 2 символа до конца строки, методом string.substring() требуется провести дополнительные вычисления: string.substring(4, (string.length-2))

Метод string.slice() позволяет указать отрицательное значение во втором аргументе, т.е. отсчитывать индекс от конца строки:

string.slice(4, -2)

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

См. также методы string.substr(), string.substring().


string.split ("разделитель" [, ограничитель])

Возвращаемое значение: массив элементов.

Совместимость
Netscape Navigator 6+ Internet Explorer 5.5+
+ +

Метод split() по своей функциональности противоположен методу array.join(), который объединяет элементы массива в одну строку, используя указанный разделитель (например, через точку-с-запятой).

С точки зрения строкового объекта JavaScript разбивает строку на элементы, разделенные определенным символом, и создает из них массив. Инициализировать массив конструктором new Array() нет необходимости. Принимая во внимание наличие функциональных методов объекта array, например array.sort(), часто возникает необходимость преобразовать набор строковых элементов в массив, чтобы воспользоваться ими. Если вашей целью является преобразование строки в массив отдельных символов, метод split() вполне подходит для выполнения этой задачи. В этом случае аргументом должна быть пустая строка.

В NN3 и IE4 метод использует только первый аргумент. В браузерах NN4+ и IE4+ в качестве первого параметра можно использовать объект регулярных выражений, что повышает возможности поиска символов-разделителей. Рассмотрим, например, следующую строку:

var nameList="1.Fred,2.Jane,3.Steve"

Для преобразования этой строки в массив из трех элементов, содержащий лишь имена, без использования регулярных выражений потребуется провести определенный синтаксический анализ еще до начала метода string.split(). Применение регулярных выражений значительно упрощает задачу

var regexp = /,*\d.\b/
var newArray = nameList.split(regexp)
// результат = массив "Fred", "Jane", "Steve"

Новый массив содержит только имена (без цифр или точек). Второй аргумент метода является дополнительным. Он позволяет указать максимальное количество элементов, сохраняемых в массиве.

И в заключение, NN4+ поддерживает дополнительные возможности (не включенные в стандарт ЕСМА), если метод string.split() применяется внутри дескриптора <SCRIPT> с версией языка JavaScript 1.2 (и только). Символ пробела, заданный как единственный параметр string.split(" "), интерпретируется как любой символ-разделитель (пробел, символ табуляции, возврат каретки, перевод строки и т.д.). Даже если количество таких символов, идущих подряд, различно, они интерпретируются как один. Возможно, это специальное свойство не будет включено в стандарт ЕСМА и будет устранено из последующих версий JavaScript в браузерах NN.


string.substr(начало [, длина])

Совместимость
Netscape Navigator 6+ Internet Explorer 5.5+
+ +

Метод string.substr() представляет собой вариант метода string.substring(), который был частью языка JavaScript с момента его создания. Различие методов заключается в том, что аргументы метода string.substr() указывают начальный индекс и количество символов в подстроке, тогда как в string.substring() необходимо указывать начальный и конечный индексы.

Как и для других методов, в string.substr() первый аргумент, индекс, отсчитывается с нуля. Если второй аргумент не указан, то в подстроку включаются все символы от начальной позиции до конца строки. То же самое происходит и тогда, когда значение второго аргумента превосходит индекс последнего символа в строке.

Этот метод не является частью стандарта ЕСМА (третье издание спецификаций языка). Но, поскольку он широко используется, стандарт допускает его применение.

См. также: метод string.substring().


string.substring(индексА, индексВ)

Возвращаемое значение: подстрока, заданная начальным (индекстА) и конечным (индексВ) индексами.

Совместимость
Netscape Navigator 6+ Internet Explorer 5.5+
+ +

Метод string.substring() позволяет выделить подстроку (т.е. группу символов) из строки. Аргументами этого метода являются начальный и конечный индексы (первый символ строки имеет индекс 0) подстроки в исходной строке. Важно отметить, что символ, заданный конечным индексом, не включается в подстроку.

В каком порядке заданы индексы - неважно: метод начинает с меньшего и заканчивает на большем (исключая последний символ). Если значения индексов совпадают, метод возвращает пустую строку, а если второй аргумент опущен, подстрока простирается до конца строки.

См. также методы string.substr(), string.slice().


string.toLocaleLowerCase()
string.toLocaleUpperCase()

Возвращаемое значение: строка.

Совместимость
Netscape Navigator 6+ Internet Explorer 5.5+
+ +

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

См. также методы string.toLowerCase(), string.toUpperCase().


string.toLOwerCase()
string.toUpperCase()

Возвращаемое значение: строка в верхнем или нижнем регистре, в зависимости от метода.

Многое из того, что происходит и запускается в Internet (и в JavaScript) учитывает регистр. URL на некоторых серверах, например, при обработке требует учета регистра в именах файлов и папок. Два этих метода представляют собой простейшие строковые методы, цель которых заключается в преобразовании строки в верхний или нижний регистр. Строки со смешанным регистром преобразуются к единому типу. Если, например, текст, введенный пользователем в поле, необходимо сравнить с некоторой строкой без учета регистра, удобно преобразовать обе строки к одному регистру, а затем проводить сравнение.

См.также: методы string.toLocaleLowerCase(), string.toLocaleUpperCase().


string.toString()
string.valueOf()

Возвращаемое значение: строковое значение.

Совместимость
Netscape Navigator 6+ Internet Explorer 5.5+
+ +

Оба метода возвращают строковые значения (в отличие от полноценных строковых объектов). Если строковый объект создан конструктором new String(), то его тип определяется как object. Поэтому, если требуется определить, какой тип значений сохраняется в данном объекте, применяется метод valueOf() с последующим оператором typeof. Объект, в первую очередь, имеет метод toString(), потому что он наследует этот метод от исходного объекта JavaScript.

Функции обработки строк

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

Следующий листинг содержит библиотеку строковых функций, предназначенных для вставки, удаления и замены блоков текста в строке. Если браузеры, на которые ориентирована страница, поддерживают подключение внешних файлов JavaScript (.js), функции будут всегда доступны сценариям.

Листинг. Функции обработки строк
// Извлечение части строки перед подстрокой searchString 
function getFront(mainStr, searchStr)
{
  foundOffset = mainStr.indexOf(searchStr);
  if (foundOffset == -1) {
    return null;
}
return mainStr.substring(0,foundOffset);
}

// Извлечение части строки после подстроки searchstring 
function getEnd(mainStr,searchStr) 
{
  foundOffset = mainStr.indexOf(searchStr);
   if (foundOffset == -1) {
     return null;
   }
  return mainStr.substring(foundOffset+searchStr.length, mainStr.length);
}

// Вставка подстроки insertstring перед подстрокой searchstring 
function insertstring(mainStr,searchStr,insertStr) 
{
 var front = getFront (mainStr, searchStr);
 var end = getEnd(mainStr,searchStr);
 if (front != null && end ! = null) {
 return front + insertStr + searchStr + end;
 }
 return null;
}

// Удаление подстроки deleteString 
function deleteString(mainStr,deleteStr) 
{
return replaceString(mainStr,deleteStr, "");
}

// Замена searchstring на replaceString
function replaceString(mainStr,searchStr,replaceStr) 
{
 var front = getFront(mainStr,searchStr);
 var end = getEnd(mainStr,searchStr);
 if (front != null && end != null) { 
  return front + replaceStr + end;
 }
 return null;
}

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

Методы форматирования

Теперь мы подошли к рассмотрению следующей группы методов строкового объекта, которые облегчают процесс создания различных характеристик строк, необходимых для создания HTML-кода средствами JavaScript. Вот список этих методов:

string.anchor("anchorName")	
string.link(locationOrURL)
string.big()
string.bold()	
string.small ()
string.fixed()	
string.strike()
string.fontcolor(colorValue)	
string.sub()
string.fontsize(integer_1to7)	
string.sup()
string.italics()

Вначале рассмотрим методы, не требующие никаких аргументов. Это, в первую очередь, методы, устанавливающие атрибуты шрифтов строки. В HTML-документе их изменение достигается парой дескрипторов, например <В>. . . </В> для полужирного шрифта. Эти методы добавляют к строковому объекту необходимые дескрипторы и возвращают текст, готовый к добавлению в HTML-код. Поэтому, например, выражение

"Good morning!".bold() превращается в Good morning!

Конечно же, HTML-код можно создавать и без этих методов, вставляя в него все необходимые дескрипторы. Одним из достоинств строковых методов является то, что они никогда не забывают поставить закрывающий дескриптор пары.

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

Листинг. Использование простых строковых методов
<HTML>
<HEAD>
<TITLE>HTML by JavaScript</TITLE>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
var page = "";
page += "JavaScript can create ";
page+="HTML on the fly.<P>Numerous string ";
page+="object methods facilitate creating text that is ";
page+="boldfaced".bold();
page+=", ";
page+="italicized".italics();
page+=", or even others.";
document.write(page);
</SCRIPT>
</BODY>
</HTML>

Два следующих метода (string.fontsize() и string.fontcolor()) также влияют на характеристики шрифта текста, отображаемого на HTML-странице. Аргументы достаточно очевидны: целое число в диапазоне от 1 до 7, задающее относительный размер шрифта, и цвет (в виде шестнадцатеричного триплета или константы имени цвета) текста. В следующем листинге к строке из предыдущего листинга добавляется определенная строка текста. Эта строка не только изменяет размер шрифта определенных частей текста, но и применяет вложенные атрибуты для задания цвета. Поскольку все эти методы не изменяют содержимого строки, их можно смело использовать как вложенные.

Листинг. Вложенные строковые методы.

<HTML>
<HEAD>
<TITLE>HTML by JavaScript</TITLE>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
var page = "";
page += "JavaScript can create HTML on the fly.
page+="<P>Numerous string object methods facilitate creating text that is " ;
page+="boldfaced".bold() ;
page+=", " ;
page+="italicised".italics () ;
page+=", or other.<P>";
page += "We can make ";
page+="some words big".fontsize (5);
page+=" and some words both ";
page+=("big and "+"colorful".fontcolor('coral')).fontsize(5);
page+=" at the same time.";
document.write(page);
</SCRIPT>
</BODY>
</HTML>

Два заключительных строковых метода позволяют добавить для строки анкер и ссылку. Аргумент метода string.anchor() используется в качестве имени анкера. Поэтому следующее выражение "Table of Contents".anchor("toc") преобразуется в

<A NAME="toc">Table of Contents</A> 

Подобным образом метод string.link() принимает в качестве параметра URL: "Back to Home".link("index.html") Это выражение преобразуется в следующее:

<A HREF="index.html">Back to Home</A>

Этими методами пользоваться необязательно - ведь можно также устанавливать дескрипторы HTML вручную. Методы проще применять, если аргументы являются переменными, чьи значения зависят от введенных пользователем данных.

Кодирование и декодирование строк URL

При взаимодействии браузеров и серверов некоторые небуквенно-цифровые символы (например пробел) нельзя пересылать в их естественной форме. Протоколы передачи данных позволяют отправлять более узкий набор символов. Для представления всех остальных символов используется специальный символ (%), за которым следует шестнадцатеричный код ASCII. Например, шестнадцатеричный код пробела равен 20 (десятичный - 32). Соответственно, он преобразуется к виду %20. Такие символы часто встречаются в списке URL, посещенных браузером документов. JavaScript поддерживает две функции, escape() и unescape(), которые позволяют преобразовывать в код отдельные строки. Для преобразования строки в закодированный формат используется оператор

escape("Howdy Pardner")  
// результат = "Howdy%20Pardner"

Функция unescape() выполняет обратное преобразование. Об этих функциях, а также некоторых других, будет рассказано позже.

Hosted by uCoz