Мониста (CommandButton) все записи автора
8. Встроенные объекты
Объекты представляют собой программные единицы, обладающие некоторыми свойствами. Об объекте мы можем судить по значениям его свойств и описанию того, как он функционирует. Программный код встроенных в JavaScript объектов нам не доступен. Встроенные объекты имеют фиксированные названия и свойства. Все свойства этих объектов разделяют на два вида: просто свойства и методы. Свойства аналогичны обычным переменным. Они имеют имена и значения. Некоторые свойства объектов доступны только для чтения. Это означает, что их значения нельзя изменять. Другие свойства доступны и для записи — их значения можно изменять с помощью оператора присваивания. Методы аналогичны функциям, они могут иметь или не иметь параметры. Чтобы узнать значение свойства объекта, необходимо указать имя этого объекта и имя свойства, отделив их друг от друга точкой: имя_объекта.свойство. Заметим, что объект может и не иметь свойств. Мы можем заставить объект выполнить тот или иной присущий ему метод. В этом случае также говорят о применении метода к объекту. Синтаксис соответствующего выражения такой: имя_объекта.метод(параметры). Заметим, что объект может не иметь методов. Итак, по синтаксису свойства отличаются от обычных переменных тем, что имеют составные имена, а также тем, что значения некоторых свойств нельзя измененить. Методы отличаются с точки зрения синтаксиса от обычных функций только тем, что имеют составные имена.
В свете изложенного выше, объект можно понимать как некоторый контейнер, содержащий переменные-свойства и функции-методы. Разумеется, в этом контейнере есть еще что-то, но оно скрыто от нас. Мы можем воздействовать на объект только с помощью свойств и методов. Встроенные объекты, как уже отмечалось, имеют фиксированные названия. Объекты с именами, совпадающими с их фиксированными названиями, называются статическими. Однако вы можете создать экземпляры (копии) статических объектов, присвоив им свои собственные имена. Экземпляры статических объектов являются объектами в вашей программе, которые наследуют от первых все их свойства и методы. Экземпляры объектов это некоторые частные воплощения в программе соответствующих статических объектов. Вместе с тем, вы можете использовать и статические объекты в чистом виде, не создавая никаких их копий. Например, для формульных вычислений используется статический объект Math, а в случае массивов создаются экземпляры статического объекта Array, содержащие конкретные данные, к которым применимы все общие методы и свойства статического объекта Array. Встроенные объекты имеют, среди прочих, свойство prototype (прототип), с помощью которого можно добавлять новые свойства и методы к уже существующим экземплярам объектов. Эти новые свойства и методы, разумеется, вы должны предварительно сами продумать и воплотить в виде программных кодов.
8.1. Объект String (Строка)
Объект String представляет интерес главным образом благодаря методам обработки строк. Он незаменим, когда требуется, например, найти позицию вхождения одной строки в другую, вырезать из строки некоторую ее часть, разбить строку на отдельные элементы и создать из них массив, и т. д.
С помощью объекта String можно создать строку как строковый объект. Однако в подавляющем большинстве случаев для этого достаточно использовать обычную переменную и оператор присваивания строкового значения. В этом случае интерпретатор все равно создает экземпляр (копию) строкового объекта, свойства и методы которого доступны из программного кода.
Создание строкового объекта
Для создания строкового объекта используется выражение следующего вида:
имя_переменной = new String("строковое_значение")
Здесь имя_переменной выполняет роль ссылки на строковый объект. Например, выражение mystring = new String("Привет!") создает строковый объект mystring со значением "Привет!" Однако можно создать строковый объект и с помощью обычного оператора присваивания:
имя_переменной = "строковое_значение"
или
var имя_переменной = "строковое_значение"
Доступ к свойствам и методам строкового объекта обеспечивается такими выражениями:
строка.свойство
String.свойство
строка.метод([параметры])
String.метод([параметры])
Некоторые методы могут и не иметь параметров, что указано с помощью квадратных скобок. Здесь строка может быть ссылкой на строковый объект, строковой переменной, выражением, возвращающим строку, а также просто строковым значением. Когда используется ключевое слово String в качестве имени объекта, это означает, что нас интересуют свойства и методы статического строкового объекта, то есть общие свойства и методы, не связанные, вообще говоря, с конкретными свойствами и методами конкретного строкового объекта (экземпляра объекта String)
Пример:
В данном примере тремя различными способами используется свойство length строкового объекта, значением которого является длина строки (количество символов в строке).
mystring = "Однажды в студеную зимнюю пору"
mystring.length //значение равно 30
"Однажды в студеную зимнюю пору".length //значение равно 30
function fstring(){return "abcde"} //функция, возвращающая строку "abcde"
fstring().length //значение равно 5
Методы строкового объекта используются для синтаксической обработки и форматирования строк. Эти две группы методов мы рассмотрим отдельно
Свойства String
length — длина или, иными словами, количество символов (включая пробелы) в строке; целое число.
Пример:
"Иван".length // значение равно 4
"Привет\nвсем".length /* значение равно 11 (\n — один символ перевода строки) */
x = "" // пустая строка
x.length // значение равно 0 (пустая строка имеет длину 0)
prototype — свойство (прототип), позволяющее добавить новые свойства и методы ко всем создаваемым строковым объектам, если уже существующих вам окажется не достаточно. Пример:
В приведенном ниже примере мы создаем новый метод для всех строковых объектов. Содержание этого метода определяется пользовательской функцией.
function myFunc() { // функция для нового метода
return "Вадим"
}
// Добавление нового метода myName к прототипу:
String.prototype.myName() = myFunc
mystring = "Автор этой книги — " + "Дунаев ".myName()
// значение mystring равно "Автор этой книги — Дунаев Вадим"
Методы String обработки строк
charAt(индекс) — возвращает символ, занимающий в строке указанную позицию.
Синтаксис: строка.charAt(индекс)
Возвращает односимвольную или пустую строку.
Параметр (индекс) является числом, индекс первого символа равен 0.
charCodeAt([индекс]) — преобразует символ в указанной позиции строки в его числовой эквивалент ( код).
Синтаксис: строка. charCodeAt([индекс])
Возвращает число.
IE4+ и NN6 поддерживают систему кодов Unicode , NN4 — ISO-Latin1.
fromСharCode(номер1 [, номер2 [, … номерN]]) — возвращает строку символов, числовые коды которой указаны в качестве параметров.
Синтаксис: String.fromСharCode(номер1 [, номер2 [, … номерN]])
Возвращает строку.
IE4+ и NN6 поддерживают систему кодов Unicode , NN4 — ISO-Latin1.
сoncat(строка) — конкатенация (склейка) строк.
Синтаксис: строка1.concat(строка2)
Возвращает строку.
Этот метод действует так же, как и оператор «+» сложения для строк: к строке строка1 приписывается справа строка строка2.
indexOf(строка_поиска [, индекс]) — производит поиск строки, указанной параметром, и возвращает индекс ее первого вхождения.
Синтаксис: строка.indexOf(строка_поиска [,индекс])
Возвращает число.
Метод производит поиск позиции первого вхождения строка_поиска в строку строка. Возвращаемое число (индекс вхождения) отсчитывается от 0. Если поиск не удачен, то возвращается –1. Поиск в пустой строке всегда возвращает –1. Поиск пустой строки всегда возвращает 0. Второй параметр, не являющийся обязательным, указывает индекс, с которого следует начать поиск. Этот метод хорошо использовать вместе с методом выделения подстроки substr() (см. ниже), когда требуется сначала определить позиции начала и конца выделяемой подстроки. Рассматриваемый здесь метод подходит для определения начальной позиции.
lastIndexOf( строка_поиска [, индекс]) — производит поиск строки, указанной параметром, и возвращает индекс ее первого вхождения; при этом поиск начинается с конца исходной строки, но возвращаемый индекс отсчитывается от ее начала, то есть от 0.
Синтаксис: строка.lastIndexOf(строка_поиска [,индекс])
Возвращает число.
Метод аналогичен рассмотренному выше indexOf()и отличается лишь направлением поиска.
localeCompare(строка) — позволяет сравнивать строки в кодировке Unicode, то есть с учетом используемого браузером языка общения с пользователем.
Синтаксис: строка1. localeCompare (строка2)
Возвращает число.
Совместимость: IE5.5+, NN6+
Если сравниваемые строки одинаковы, метод возвращает 0. Если строка1 меньше, чем строка2, то возвращается отрицательное число, в противном случае — положительное. Сравнение строк происходит путем сравнения сумм кодов их символов. Абсолютное значение возвращаемого числа зависит от браузера. Так, IE5.5 и IE6.0 возвращают 1 или –1, а NN6 — разность сумм кодов в кодировке Unicode.
slice( индекс1 [, индекс2]) — возвращает подстроку исходной строки, начальный и конечный индексы которой указываются параметрами, за исключением последнего символа.
Синтаксис: строка.slice(индекс1 [, индекс2])
Возвращает строку.
Данный метод не изменяет исходную строку.
Если второй параметр не указан, то возвращается подстрока с начальной позицией индекс1 и до конца строки. Отсчет позиций начинается с начала строки. Первый символ строки имеет индекс 0. Если второй параметр указан, то возвращается подстрока исходной строки, начиная с позиции индекс1 и до позиции индекс2, исключая последний символ. Если второй параметр отрицателен, то отсчет конечного индекса производится от конца строки. В этом заключается основное отличие метода slice() от substr(). Сравните также этот метод с методом substring().
split( разделитель [, ограничитель]) — возвращает массив элементов, полученных из исходной строки.
Синтаксис: строка.split(разделитель [, ограничитель])
Возвращает массив.
Первый параметр является строкой символов, используемой в качестве разделителя строки на элементы. Второй необязательный параметр — число, указывающее, сколько элементов строки, полученной при разделелении, следует включить в возвращаемый массив. Если разделитель — пустая строка, то возвращается массив символов строки.
substr(индекс [, длина]) — возвращает подстроку исходной строки, начальный индекс и длина которой указываются параметрами.
Синтаксис: строка.substr(индекс [, длина])
Возвращает строку.
Данный метод не изменяет исходную строку.
Если второй параметр не указан, то возвращается подстрока с начальной позицией индекс1 и до конца строки. Отсчет позиций начинается с начала строки. Первый символ строки имеет индекс 0. Если второй параметр указан, то возвращается подстрока исходной строки, начиная с позиции индекс1 и c общим количеством символов, равным длина. Сравните этот метод с методами slice() и substring().
substring(индекс1 , индекс2) — возвращает подстроку исходной строки, начальный и конечный индексы которой указываются параметрами.
Синтаксис: строка.substring(индекс1 , индекс2)
Возвращает строку.
Данный метод не изменяет исходную строку.
Порядок индексов не важен: наименьший из них считается начальным. Отсчет позиций начинается с начала строки. Первый символ строки имеет индекс 0. Символ, соответствующий конечному индексу, не включается в возвращаемую строку. Сравните этот метод с методами substr() и slice().
toLocaleLowerCase(), toLowerCase() — переводят строку в нижний регистр.
Синтаксис: строка.toLocaleLowerCase(), строка.toLowerCase()
Возвращают строку. Первый метод работает в IE5.5+, NN6, учитывает определенные языковые системы.
Приведение строк к одному и тому же регистру требуется, например, при сравнении содержимого строк без учета регистра. Кроме того, многие серверы чувствительны к регистру, в котором определены имена файлов и папки (обычно требуется, чтобы они были определены в нижнем регистре).
toLocaleUpperCase(), toUpperCase() — переводят строку в верхний регистр.
Синтаксис: строка.toLocaleUpperCase(), строка.toUpperCase()
Возвращают строку.
Первый метод работает в IE5.5+, NN6, учитывает определенные языковые системы.
Приведение строк к одному и тому же регистру требуется, например, при сравнении содержимого строк без учета регистра. Кроме того, многие серверы чувствительны к регистру, в котором определены имена файлов и папки.
Методы String форматирования строк
Как известно, тексты на Web-страницах обычно создаются и форматируются с помощью тэгов HTML. Однако тексты можно создавать на Web-страницах и с помощью сценариев. Например, чтобы вывести на Web-страницу строку "Привет всем!" полужирным шрифтом, в HTML-коде следует написать следующую инструкцию: < B>Привет всем!< /B>
Чтобы подготовить эту же строку в таком же формате средствами JavaScript, в сценарии следует написать такое выражение: "Привет всем!".bold()
Здесь использован метод bold() строкового объекта для форматирования строк. Выполнение этого выражения лишь создает отформатированную строку, но не выводит ее в окно браузера. Чтобы сделать это, следует еще выполнить метод write() объекта document для записи этой строки в HTML-документ. Методы форматирования строк носят названия, соответствующие тэгам HTML. Их особенность в том, что в отличие от тэгов, их следует записывать только в нижнем регистре (строчными буквами). Синтаксис такой же, как и у ранее рассмотренных методов: строка.метод(параметр)
Большинство методов форматирования не имеют параметров. Ниже приведен их список:
anchor("anchor_имя") link(расположение или URL)
blink() big()
bold() small()
fixed() strike()
fontcolor(значение_цвета) sub()
fontsize(число от 1 до 7) sup()
italics()