Инструменты пользователя

Инструменты сайта


object_string

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

object_string [2011/12/22 15:46] (текущий)
Строка 1: Строка 1:
 +====== Object String ======
 +  * [[http://​wdh.suncloud.ru/​js09.htm|Строки встроенный объект String]]
 +  * [[http://​javascript.ru/​String|String]]
 +
 +Поддержка строк в JavaScript обеспечивается объектом String().
 +
 +В таблице представлены свойства и методы строк, наиболее часто применяемые в сценариях: ​
 +<​file>​
 +Свойство Пояснение ​
 +string.length Длина (количество символов) строки ​
 +string.prototype Ссылка на прототип класса объекта. Это свойство позволяет добавлять в объекты новые методы. ​
 +Метод Пояснение ​
 +str1.bold() Выводит содержимое строки полужирным шрифтом так, как будто строка заключена в теги <​b></​b> ​
 +str1.italics() Выводит содержимое строки курсивом так, как будто строка заключена в теги <​i></​i> ​
 +str1.strike() Выводит содержимое строки перечеркнутым так, как будто строка заключена в теги <​s></​s> ​
 +str1.big() Выводит содержимое строки шрифтом на единицу большим,​ чем текущий так, как будто строка заключена в теги <​big></​big> ​
 +str1.small() Выводит содержимое строки шрифтом на единицу меньшим,​ чем текущий так, как будто строка заключена в теги <​small></​small> ​
 +str1.sub() Выводит содержимое строки со смещением вниз относительно базовой линии так, как будто строка заключена в теги <​sub></​sub> ​
 +str1.sup() Выводит содержимое строки со смещением вверх относительно базовой линии так, как будто строка заключена в теги <​sup></​sup> ​
 +str1.fixed() Выводит содержимое строки моноширным шрифтом так, как будто строка заключена в теги <​tt></​tt> ​
 +str1.fontSize(size) Выводит содержимое строки шрифтом указанного размера так, как будто строка заключена в теги <font size="​size"></​font> ​
 +str1.fontColor(color) Выводит содержимое строки шрифтом указанного цвета так, как будто строка заключена в теги <font color="​color"></​font> ​
 +str1.link(url) Возвращает содержимое строки как гиперссылку на указанный ресурс ​
 +str1.toUpperCase() Возвращает строку в верхнем регистре ​
 +str1.toLowerCase() Возвращает строку в нижнем регистре ​
 +</​file> ​
 +<​file> ​
 +string str1.charAt(index) Возвращает символ строки из указанной позиции ​
 +number str1.charCodeAt(index) Возвращает Unicode - код символа строки из указанной позиции ​
 +</​file> ​
 +<​file>​
 +number str1.indexOf(str2[,​ start]) Возвращает позицию,​ с которой начинается первое вхождение подстроки str2 в строку str1.
 +Если указан параметр start, поиск подстроки начинается с указанной позиции. Если подстрока str2 в строке str1 не найдена,​ метод возвращает -1. 
 +number str1.lastIndexOf(str2[,​ end) Возвращает позицию,​ с которой начинается последнее вхождение подстроки str2 в строку str1.
 +Если указан параметр end, поиск подстроки начинается с указанной позиции. Если подстрока str2 в строке str1 не найдена,​ метод возвращает -1. 
 +string str1.slice(start[,​ end]) Возвращает часть строки от позиции start и заканчивая позицией end не включительно.
 +Если параметр end опущен,​ подстрока продолжается до конца строки. ​
 +</​file>​
 +  * string str1.**substring**(start[,​ end]) Возвращает часть строки от позиции start и заканчивая позицией end не включительно. Если параметр end опущен,​ подстрока продолжается до конца строки. В качестве начальной позиции выступает меньшее из двух указанных значений,​ т.е. вызовы substring(0,​5) и substring(5,​0) эквивалентны.
 +  * string str1.**substr**(start[,​ length]) Возвращает часть строки указанной длины начиная с позиции start. Если параметр length равен 0 или имеет отрицательное значение,​ возвращается пустая строка.Если параметр length не указан,​ подстрока продолжается до конца строки.
 +  * array str1.**split**(seperator[,​ limit]) Разбивает строку str1 на подстроки,​ разделяемые в строке указанным разделителем и возвращает массив подстрок.
 +Параметр limit служит для ограничения количества элементов в результирующем массиве
 +
 +В таблицу не вошли несколько методов строк, предназначенных для работы с регулярными выражениями.
 +===== Применение методов форматирующих вывод =====
 +
 +Методы,​ форматирующие вывод применяются в тех случаях,​ когда необходимо вывести строку на страницу не просто как текстовый фрагмент,​ а еще и снабдить ее определенным форматом,​ то есть вывести строку полужирной,​ курсивом или заданным цветом текста. Безусловно,​ можно обойтись и без использования данных функций,​ однако при этом придется предпринимать дополнительные действия для форматирования вывода. Следует помнить,​ что функции,​ форматирующие вывод, не изменяют содержимого строки,​ они возвращают отформатированную строку. ​
 +
 +Приведем практический пример:​ необходимо вывести список гиперссылок на поисковые системы,​ которые хранятся в сценарии в виде массива. Ниже показан один из способов реализации данной задачи: ​
 +
 +Листинг:​ Применение методов форматирования вывода строк  ​
 +<​file>​
 +var titles = new Array("​Rambler",​ "​Yandex",​ "​Google",​ "​Altavista"​);​
 +var urls   = new Array("​http://​www.rambler.ru",​ "​http://​www.ya.ru", ​
 +             "​http://​www.google.com",​ "​http://​www.altavista.com"​);​
 +
 +for (var i=0; i<​titles.length;​ i++) {
 +    document.write (titles[i].bold()+":​ "​+urls[i].link(urls[i])+"<​br />"​);​
 +}
 +</​file>​
 +
 +Приведенный выше фрагмент кода сначала выводит полужирным начертанием название поискового сервера (элементы массива "​titles"​ - заголовки),​ а, затем, саму гиперссылку из массива "​urls",​ причем,​ текст гиперссылки и адрес ресурса совпадают. ​
 +
 +Для сравнения,​ ниже приводится строка вывода на страницу без использования вышеописанных методов: ​
 +
 +<​file>​
 +document.write ("<​b>"​+titles[i]+"</​b>:​ <a href='"​+urls[i]+"'>"​+urls[i]+"</​a><​br />"​)
 +</​file>;​
 +===== Применение методов indexOf() и lastIndexOf() =====
 +
 +Методы indexOf() и lastIndexOf() применяются в тех ситуациях,​ когда необходимо проверить,​ является ли некоторая последовательность символов частью строки. Такая необходимость может возникнуть,​ например,​ при проверке достоверности данных,​ введенных пользователем. Приведем простой пример:​ от пользователя требуется ввести адрес электронной почты а сценарий должен проверить корректность ввода (упрощенно): ​
 +
 +Листинг:​ Пример применения метода '​indexOf()'  ​
 +<​file>​
 +var email;
 +do {
 +    email = prompt ("​Введите свой e-mail:",""​)
 +    if (email.indexOf("​@"​) == -1) {
 +        alert ("​Введенный e-mail синтаксически некорректен!\nПовторите операцию."​);​
 +    }
 +    else 
 +        break;
 +} while (true);
 +alert ("​Спасибо за сотрудничество!"​);​
 +</​file>​
 +Сценарий в бесконечном цикле запрашивает у пользователя ввод e-mail адреса и проверяет наличие в нем символа "​@"​. Если таковой отсутствует,​ метод indexOf("​@"​) вернет значение -1 и пользователь получит сообщение об ошибке,​ после чего запрос повторится. Цикл будет продолжаться до тех пор, пока пользователь не введет строку,​ содержащую символ "​@"​. Совершенно очевидно,​ что проверка корректности адреса,​ введенного пользователем,​ не претендует на полноту и ее запросто можно обойти,​ введя при запросе символ "​@"​. ​
 +
 +Еще один пример демонстрирует применение метода indexOf() с параметром "​start"​. Пример позволяет вычислить вероятность появления некоторого символа (например - '​а'​) в произвольном тексте: ​
 +
 +<​file>​
 +var text="​Карл у Клары украл кораллы,​ Клара у Карла украла кларнет.";​
 +var count=0, start=0;
 +do {
 +    start=text.indexOf("​а",​ start);
 +    if (start > 0) 
 +        count++;
 +} while (start > 0);
 +alert ("​Символ '​а'​ всречается в строке с вероятностью "​+count/​text.length*100+"​%"​);​
 +</​file>​
 +===== Применение методов slice(), substring() и substr() =====
 +
 +Все три метода,​ как следует из таблицы,​ служат для получения части строки. Эти методы так же можно применить при проверке данных. Например,​ из адреса электронной почты пользователя необходимо выделить в отдельные строки логин пользователя (символы,​ находящиеся перед символом "​@"​) и адрес почтового сервера (символы,​ находящиеся после символа "​@"​) с целью их дальнейшей проверки. Упрощая ситуацию,​ проверим наличие "​."​ в адресе почтового сервера и отсутствие "​."​ в логине пользователя: ​
 +
 +Листинг:​ Получение подстроки  ​
 +<​file>​
 +var email;
 +do {
 +    email = prompt ("​Введите свой e-mail:","​username@host.com"​)
 +    var pos1 = email.indexOf("​@"​);​
 +    if (pos1 == -1) {
 +        alert ("​Введенный e-mail синтаксически некорректен!\nПовторите операцию."​); ​   ​
 +    }
 +    else {
 +        var userName = email.substring(0,​ pos1); ​
 +        var host = email.slice(pos1+1); ​
 +        ​
 +        if (userName.indexOf("​."​) != -1) 
 +            alert ("​Введенный e-mail синтаксически некорректен!\nПовторите операцию."​);​
 +        else if (host.indexOf("​."​) == -1)
 +            alert ("​Введенный e-mail синтаксически некорректен!\nПовторите операцию."​);​
 +        else 
 +            break;
 +    }    ​
 +} while (true);
 +alert ("​Спасибо за сотрудничество!"​);​
 +</​file>​
 +После такой доработки проверка стала значительно лучше, хотя она все еще не универсальна. Теперь пользователь должен вводить символы до "​@"​ без точек, а символы после "​@"​ обязательно должны содержать хотя бы одну точку. ​
 +
 +===== Применение метода split() =====
 +
 +Метод split() можно с успехом применять для ввода массивов с клавиатуры. Ниже на примере демонстрируется одна из возможных реализаций этого подхода: ​
 +
 +Листинг:​ Применение метода '​split()'  ​
 +<​file>​
 +var s = prompt ("​Введите несколько числовых значений,​ разделенных запятыми:",​ "​1,​2,​5,​0,​3,​7"​);​
 +var a = s.split(","​);​
 +var sum=0;
 +for (var i=0; i<​a.length;​ i++)
 +    sum+=parseInt(a[i]);​
 +    ​
 +alert ("​Сумма элементов введенного массива:​ "​+sum);​
 +</​file>​
 +
 +О функции split() необходимо сказать то, что она поддерживает регулярные выражения,​ к изучению которых мы вскоре приступим. Это означает,​ что вместо фиксированной строки-разделителя (например - ","​) можно использовать шаблон,​ маску разделителя. В последнем случае сценарий станет намного эффективнее и универсальнее.
  
object_string.txt · Последние изменения: 2011/12/22 15:46 (внешнее изменение)