Название реферата: JavaScript
Раздел: Программирование и компьютеры
Скачано с сайта: www.newreferat.com
Дата размещения: 21.09.2011
JavaScript
1. Методы и функции JavaScript для работы со строками.
String - объект, представляющий серию символов в строке.
Объект ядра | |
Реализован в |
JavaScript 1.0: Объект String создаётся только символами в кавычках. JavaScript 1.1, NES 2.0: добавлен конструктор String; добавлено свойство prototype; добавлен метод split; добавлена возможность передавать строки между скриптами различных окон или фрэймов (в предыдущих версиях Вы должны были добавить пустую строку в строку другого окна, чтобы обратиться к ней). JavaScript 1.2, NES 3.0: добавлены методы concat, match, replace, search, slice и substr. JavaScript 1.3: добавлен метод toSource; изменены методы charCodeAt, fromCharCode и replace. |
Версия ECMA |
ECMA-262 |
Создание:
Конструктор String: new String(string)
Параметр
string |
Любая строка. |
Описание
Объект String это оболочка вокруг строки данных примитивных типов. Не путайте строковой литерал с объектом String. Например, следующий код создаёт строковой литерал s1 и String-объект s2:
s1 = "foo" // создаётся строковое литеральное значениеs2 = new String("foo") // создаётся String-объект
Вы можете вызвать любой метод String-объекта в строковом литеральном значении -- JavaScript автоматически конвертирует строковой литерал во временный String-объект, вызывает метод, затем уничтожает временный String-объект. Можно также использовать свойство String.length со строковым литералом.
Вы должны использовать строковые литералы, если нет специальной необходимости использовать String-объект, поскольку String-объекты могут вести себя непредсказуемо. Например:
s1 = "2 + 2" // создаёт строковое литеральное значениеs2 = new String("2 + 2") // создаёт String-объектeval(s1) // возвращает число 4eval(s2) // возвращает строку "2 + 2"
Строка может быть представлена как литерал, заключённый в одинарные или двойные кавычки; например, "Netscape" или 'Netscape'.
Вы можете конвертировать значение любого объекта в строку, используя функцию верхнего уровня String.
Свойства. Резюме
Свойство |
Описание |
constructor |
Специфицирует функцию, которая создаёт прототип объекта. |
length |
Отражает длину строки. |
prototype |
Позволяет добавлять свойства в String-объект. |
Методы. Резюме.
Метод |
Описание |
anchor |
Создаёт HTML-якорь, используемый как цель гиперссылки. |
big |
Выводит строку шрифтом big/увеличенным, как в тэге BIG. |
blink |
Выводит строку шрифтом blink, как в тэге BLINK. |
bold |
Выводит строку жирным шрифтом, как в тэге B. |
charAt |
Возвращает символ по специфицированному индексу. |
charCodeAt |
Возвращает число, указывающее Unicode-значение символа по данному индексу. |
concat |
Объединяет текст двух строк и возвращает новую строку. |
fixed |
Выводит строку шрифтом фиксированной ширины, как в тэге TT. |
fontcolor |
Выводит строку специфицированным цветом, как в тэге <FONT COLOR=color>. |
fontsize |
Выводит строку шрифтом специфицированного размера, как в тэге <FONT SIZE=size>. |
fromCharCode |
Возвращает строку, созданную с использованием специфицированной последовательности Unicode-значений. |
indexOf |
Возвращает индекс, в вызывающем String-объекте, первого появления специфицированного значения или -1 - если оно не найдено. |
italics |
Выводит строку шрифтом italic, как в тэге I. |
lastIndexOf |
Возвращает индекс, в вызывающем String-объекте, последнего появления специфицированного значения или -1 - если оно не найдено. |
link |
Создаёт гиперссылку HTML, которая вызывает другой URL. |
match |
Используется для поиска совпадений регулярного выражения со строкой. |
replace |
Используется для поиска совпадений регулярного выражения со строкой и для замены совпавшей подстроки новой подстрокой. |
search |
Выполняет поиск совпадения между регулярным выражением и специфицированной строкой. |
slice |
Извлекает часть строки и возвращает новую строку. |
small |
Выводит строку шрифтом small/уменьшенным, как в тэге SMALL. |
split |
Разделяет String-объект на массив строк, разделяя строку на подстроки. |
strike |
Выводит строку перечёркнутым шрифтом, как в тэге STRIKE. |
sub |
Выводит строку как subscript/подиндекс, как в тэге SUB. |
substr |
Возвращает специфицированное количество символов строки, начинающихся от специфицированного места. |
substring |
Возвращает символы строки между двумя индексами строки. |
sup |
Выводит строку как superscript/надиндекс, как в тэге SUP. |
toLowerCase |
Возвращает вызывающую строку, конвертированную в нижний регистр. |
toSource |
Возвращает литерал объекта, представляющий специфицированный объект; можно использовать это значение для создания нового объекта. Переопределяет метод Object.toSource. |
toString |
Возвращает строку, представляющую специфицированный объект. Переопределяет метод Object.toString. |
toUpperCase |
Возвращает вызывающую строку, конвертированную в верхний регистр. |
valueOf |
Возвращает примитивное значение специфицированного объекта. Переопределяет метод Object.valueOf. |
Кроме того, этот объект наследует методы watch и unwatch из объекта Object.
Примеры
Пример 1: Строковой литерал. Создаётся строковой литерал: var last_name = "Schaefer"
Пример 2: Свойства строкового литерала. Следующие операторы вычисляются в 8, "SCHAEFER" и "schaefer": last_name.length last_name.toUpperCase() last_name.toLowerCase()
Пример 3: Доступ к определённым символам строки. Вы можете представить строку как массив символов. Тогда можно получить доступ к отдельным символам строки по индексу этого массива. var myString = "Hello"myString[0] // возвращает "H"
Пример 4: Передача строки между скриптами в различных окнах и фрэймах. Следующий код создаёт две строковые переменные и открывает второе окно: var lastName = "Schaefer"var firstName = "Jesse"empWindow=window.open('string2.html','window1','width=300,height=300')
Если код HTML второго окна (string2.html) создаёт две строковые переменные empLastName и empFirstName, следующий код в первом окне присваивает значения переменным второго окна: empWindow.empFirstName=firstName empWindow.empLastName=lastName
А этот код в первом окне выводит значения переменных второго окна: alert('empFirstName in empWindow is ' + empWindow.empFirstName)alert('empLastName in empWindow is ' + empWindow.empLastName)
big
Выводит строку увеличенным шрифтом, как при использовании тэга BIG.
Метод из |
String |
Реализован в |
JavaScript 1.0, NES 2.0 |
Используйте метод big вместе с методами write или writeln для форматирования и отображения строки в документе. В серверном JavaScript используйте функцию write для отображения строки.
Пример
Используются методы работы со строками для изменения размера текста строки: var worldString="Hello, world"document.write(worldString.small()) document.write("<P>" + worldString.big())document.write("<P>" + worldString.fontsize(7))
Такой же вывод даст следующий HTML: <SMALL>Hello, world</SMALL><P><BIG>Hello, world</BIG><P><FONTSIZE=7>Hello, world</FONTSIZE>
blink
Выводит строку шрифтом blink, как при использовании тэга BLINK.
Метод из |
String |
Реализован в |
JavaScript 1.0, NES 2.0 |
Описание
Используйте метод blink вместе с методами write или writeln для форматирования и отображения строки в документе. В серверном JavaScript используйте функцию write для отображения строки.
Пример
Здесь используются методы работы со строками для изменения форматирования строки: var worldString="Hello, world"document.write(worldString.blink()) document.write("<P>" + worldString.bold())document.write("<P>" + worldString.italics())document.write("<P>" + worldString.strike())
Предыдущий пример даст тот же вывод, что и следующий HTML: <BLINK>Hello, world</BLINK><P><B>Hello, world</B><P><I>Hello, world</I><P><STRIKE>Hello, world</STRIKE>
bold
Выводит строку шрифтом bold, как при использовании тэга B.
Метод из |
String |
Реализован в |
JavaScript 1.0, NES 2.0 |
Синтаксис bold()
Параметры отсутствуют.
Описание
Используйте метод bold вместе с методами write или writeln для форматирования и отображения строки в документе. В серверном JavaScript используйте функцию write для отображения строки.
Пример
Здесь используются методы работы со строками для изменения форматирования строки: var worldString="Hello, world" document.write(worldString.blink()) document.write("<P>" + worldString.bold())document.write("<P>" + worldString.italics())document.write("<P>" + worldString.strike())
Предыдущий пример даст тот же вывод, что и следующий HTML: <BLINK>Hello, world</BLINK><P><B>Hello, world</B><P><I>Hello, world</I><P><STRIKE>Hello, world</STRIKE>
charAt
Возвращает специфицированный символ из строки.
Метод из |
String |
Реализован в |
JavaScript 1.0, NES 2.0 |
Версия ECMA |
ECMA-262 |
Синтаксис charAt(index)
Параметр
index |
Целое число в диапазоне от 0 до числа, меньшего длины строки на 1. |
Описание
Символы строки индексируются слева направо. Индекс первого символа строки равен 0, а последнего (для строки с именем stringName) stringName.length - 1. Если предоставляемый Вами index выходит за пределы указанного диапазона, JavaScript возвращает пустую строку.
Пример
Отображаются символы из различных мест строки "Brave new world": var anyString="Brave new world"document.writeln("The character at index 0 is " + anyString.charAt(0))document.writeln("The character at index 1 is " + anyString.charAt(1))document.writeln("The character at index 2 is " + anyString.charAt(2))document.writeln("The character at index 3 is " + anyString.charAt(3))document.writeln("The character at index 4 is " + anyString.charAt(4))
На выходе будет:
The character at index 0 is B
The character at index 1 is r
The character at index 2 is a
The character at index 3 is v
The character at index 4 is e
charCodeAt
Возвращает число - Unicode-значение символа, находящегося в строке по данному индексу.
Метод из |
String |
Реализован в |
JavaScript 1.2, NES 3.0 JavaScript 1.3: возвращает Unicode-значение, а не значение из набора символов ISO-Latin-1. |
Версия ECMA |
ECMA-262 |
Синтаксис charCodeAt([index])
Параметр
index |
Целое число в диапазоне от 0 до числа, меньшего длины строки на 1. По умолчанию имеет значение 0. |
Описание
Unicode-значения в диапазоне от 0 до 65,535. Первые 128 Unicode-значений совпадают напрямую с набором символов ASCII. Об Unicode см. книгу Клиентский JavaScript. Руководство.
Обратная Совместимость
JavaScript 1.2. Метод charCodeAt возвращает число - значение из набора символов ISO-Latin-1 для символа по данному индексу в строке. Диапазон значений для набора ISO-Latin-1 - от 0 до 255. Первые числа от 0 до 127 напрямую соответствуют набору символов ASCII.
Пример
Пример 1. Этот пример возвращает 65, Unicode-значение латинской заглавной A. "ABC".charCodeAt(0) // возвращает 65
Пример 2. Создаётся событие для симуляции нажатия клавиши. Событие KeyPress имеет свойство which, которое представляет ASCII-значение нажатой клавиши. Если Вам известна буква, число или символ, Вы можете использовать charCodeAt для предоставления ASCII-значения в свойство which. //создаётся Еvent-объект с нужными значениями свойствev = new Event()ev.type = KeyPressev.layerX = 150//присваиваются значения свойствам layerY, pageX, pageY, screenX и screenY . //присваивается ASCII-значение свойству whichev.which = "v".charCodeAt(0)//assign modifier propertyev.modifiers = <FONT COLOR="#FF0080">How do I do this?</FONT>
concat
Объединяет текст двух или более строк и возвращает новую строку.
Метод из |
String |
Реализован в |
JavaScript 1.2, NES 3.0 |
Синтаксис concat(string2, string3[, ., stringN])
Параметры
string2 . stringN |
Объединяемые строки. |
Описание
concat объединяет текст строк и возвращает новую строку. Изменения в тексте одной строки не влияют на другую.
Пример
s1="Oh "
s2="what a beautiful "
s3="mornin'." s4=s1.concat(s2,s3) // возвращает "Oh what a beautiful mornin'."
constructor
Специфицирует функцию, которая создаёт прототип объекта. Заметьте, что значением этого свойства является ссылка на функцию, а не строка с именем функции.
Свойство из |
String |
Реализовано в |
JavaScript 1.1, NES 2.0 |
Версия ECMA |
ECMA-262 |
fontcolor
Отображает строку специфицированным цветом, как при использовании тэга <FONT COLOR=color>.
Метод из |
String |
Реализован в |
JavaScript 1.0, NES 2.0 |
Синтаксис fontcolor(color)
Параметр
color |
Строка, выражающая цвет как 16-ричный RGB-триплет или как строковой литерал. Строковые литералы - названия цветов перечислены в книге Клиентский JavaScript. Руководство. |
Описание
Используйте метод fontcolor вместе с методами write или writeln для форматирования и отображения строки в документе. В серверном JavaScript используйте функцию write для отображения строки.
Если color выражается как 16-ричный RGB-триплет, Вы обязаны использовать формат rrggbb. Например, 16-ричные RGB-значения для цвета salmon будут red=FA, green=80 и blue=72, то есть RGB-триплет для salmon будет "FA8072".
Метод fontcolor переопределяет значение, установленное в свойстве fgColor.
Пример
Метод fontcolor используется для изменения цвета строки: var worldString="Hello, world"document.write(worldString.fontcolor("maroon") + " is maroon in this line")document.write("<P>" + worldString.fontcolor("salmon") + " is salmon in this line")document.write("<P>" + worldString.fontcolor("red") + " is red in this line")document.write("<P>" + worldString.fontcolor("8000") + " is maroon in hexadecimal in this line")document.write("<P>" + worldString.fontcolor("FA8072") + " is salmon in hexadecimal in this line")document.write("<P>" + worldString.fontcolor("FF00") + " is red in hexadecimal in this line")
Предыдущий пример даст тот же вывод, что и следующий HTML: <FONT COLOR="maroon">Hello, world</FONT> is maroon in this line<P><FONT COLOR="salmon">Hello, world</FONT> is salmon in this line<P><FONT COLOR="red">Hello, world</FONT> is red in this line<FONT COLOR="8000">Hello, world</FONT> is maroon in hexadecimal in this line<P><FONT COLOR="FA8072">Hello, world</FONT> is salmon in hexadecimal in this line<P><FONT COLOR="FF00">Hello, world</FONT> is red in hexadecimal in this line
fontsize
Вызывает отображение строки шрифта специфицированного размера, как при использовании тэга <FONT SIZE=size>.
Метод из |
String |
Реализован в |
JavaScript 1.0, NES 2.0 |
Синтаксис fontsize(size)
Параметр
size |
Целое число в диапазоне от 1 до 7; строка, представляющая целое число со знаком в диапазоне от 1 до 7. |
Описание
Используйте метод fontsize вместе с методами write или writeln для форматирования и отображения строки в документе. В серверном JavaScript используйте функцию write для отображения строки.
Если size специфицируется как целое число, Вы устанавливаете размер для stringName в один из 7 определённых размеров. Если size специфицируется как строка, такая как "-2", Вы настраиваете размер шрифта строки stringName относительно размера, установленного в тэге BASEFONT.
Пример
Метод string изменяет размер шрифта строки: var worldString="Hello, world"document.write(worldString.small()) document.write("<P>" + worldString.big())document.write("<P>" + worldString.fontsize(7))
Предыдущий пример даст тот же вывод, что и следующий HTML: <SMALL>Hello, world</SMALL><P><BIG>Hello, world</BIG><P><FONTSIZE=7>Hello, world</FONTSIZE>
indexOf
Возвращает индекс первого появления специфицированного значения в вызывающем String-объекте, начиная поиск с fromIndex, или возвращает -1, если значение не найдено.
Метод из |
String |
Реализован в |
JavaScript 1.0, NES 2.0 |
Версия ECMA |
ECMA-262 |
Синтаксис indexOf(searchValue[, fromIndex])
Параметры
searchValue |
Строка, представляющая искомое значение. |
fromIndex |
Место в вызывающей строке, с которого начинать поиск. Это может быть целое число в диапазоне от 0 до длины строки. По умолчанию имеет значение 0. |
Описание
Символы в строке индексируются слева направо. Индекс первого символа равен 0, а индекс последнего символа строки stringName равен stringName.length - 1. "Blue Whale".indexOf("Blue") // возвращает 0 "Blue Whale".indexOf("Blute") // возвращает -1 "Blue Whale".indexOf("Whale",0) // возвращает 5 "Blue Whale".indexOf("Whale",5) // возвращает 5 "Blue Whale".indexOf("",9) // возвращает 9 "Blue Whale".indexOf("",10) // возвращает 10 "Blue Whale".indexOf("",11) // возвращает 10
Метод indexOf учитывает регистр. Например, следующее выражение возвращает -1: "Blue Whale".indexOf("blue")
Примеры
Пример 1. Методы indexOf и lastIndexOf используются для локализации значений в строке "Brave new world." var anyString="Brave new world"// Выводит 8 document.write("<P>The index of the first w from the beginning is " + anyString.indexOf("w")) // Выводит 10 document.write("<P>The index of the first w from the end is " + anyString.lastIndexOf("w")) // Выводит 6 document.write("<P>The index of 'new' from the beginning is " + anyString.indexOf("new")) // Выводит 6 document.write("<P>The index of 'new' from the end is " + anyString.lastIndexOf("new"))
Пример 2. В этом примере определены две строковые переменные. Они содержат одинаковые строки, но вторая строка содержит символы в верхнем регистре. Первый метод writeln выводит 19. Поскольку метод indexOf учитывает регистр символов, строка "cheddar" не найдена в строке myCapString, поэтому второй метод writeln выведет -1. myString="brie, pepper jack, cheddar" myCapString="Brie, Pepper Jack, Cheddar" document.writeln('myString.indexOf("cheddar") is ' + myString.indexOf("cheddar")) document.writeln('<P>myCapString.indexOf("cheddar") is ' + myCapString.indexOf("cheddar"))
Пример 3. Здесь в count устанавливается количество вхождений буквы x в строке str: count = 0; pos = str.indexOf("x"); while ( pos != -1 ) { count++; pos = str.indexOf("x",pos+1); }
italics
Выводит строку шрифтом italic, как при использовании тэга <I>.
Метод из |
String |
Реализован в |
JavaScript 1.0, NES 2.0 |
Синтаксис italics()
Описание
Используйте метод italics вместе с методами write или writeln для форматирования и отображения строки в документе. В серверном JavaScript используйте функцию write для отображения строки.
Пример
Здесь используются методы работы со строками для изменения форматирования строки: var worldString="Hello, world"document.write(worldString.blink()) document.write("<P>" + worldString.bold()) document.write("<P>" + worldString.italics()) document.write("<P>" + worldString.strike())
Предыдущий пример даст тот же вывод, что и следующий HTML: <BLINK>Hello, world</BLINK> <P><B>Hello, world</B> <P><I>Hello, world</I> <P><STRIKE>Hello, world</STRIKE>
См. также
String.blink, String.bold, String.strike
lastIndexOf
Возвращает индекс последнего появления специфицированного значения в вызывающем String-объекте или -1, если ничего не найдено. Поиск в вызывающей строке идёт в обратном направлении, справа налево, начиная с fromIndex.
Метод из |
String |
Реализован в |
JavaScript 1.0, NES 2.0 |
Версия ECMA |
ECMA-262 |
Синтаксис lastIndexOf(searchValue[, fromIndex])
Параметры
searchValue |
Строка, представляющая искомое значение. |
fromIndex |
Место в вызывающей строке, с которого начинать поиск. Это может быть целое число в диапазоне от 0 до длины строки. Значение по умолчанию - длина строки. |
Описание
Символы в строке индексируются слева направо. Индекс первого символа равен 0, а индекс последнего символа равен stringName.length - 1. "canal".lastIndexOf("a") // возвращает 3 "canal".lastIndexOf("a",2) // возвращает 1 "canal".lastIndexOf("a",0) // возвращает -1 "canal".lastIndexOf("x") // возвращает -1
Метод lastIndexOf учитывает регистр символов. Например, следующее выражение возвратит -1: "Blue Whale, Killer Whale".lastIndexOf("blue")
Пример
Здесь методы indexOf и lastIndexOf используются для локализации значений в строке "Brave new world." var anyString="Brave new world"// Выводит 8 document.write("<P>The index of the first w from the beginning is " + anyString.indexOf("w")) // Выводит 10 document.write("<P>The index of the first w from the end is " + anyString.lastIndexOf("w")) // Выводит 6 document.write("<P>The index of 'new' from the beginning is " + anyString.indexOf("new")) // Выводит 6 document.write("<P>The index of 'new' from the end is " + anyString.lastIndexOf("new"))
length
Длина строки.
Свойство из |
String |
Только для чтения | |
Реализовано в |
JavaScript 1.0, NES 2.0 |
Версия ECMA |
ECMA-262 |
Описание
Для null-строки длина будет равна 0.
Пример
Будет выведена цифра 8 в диалоговом окне Alert: var x="Netscape" alert("The string length is " + x.length)
match
Используется для поиска совпадений регулярного выражения со строкой.
Метод из |
String |
Реализован в |
JavaScript 1.2 |
Синтаксис match(regexp)
Параметр
regexp |
Имя регулярного выражения. Это может быть имя переменной или литерал. |
Описание
Если Вам нужно выполнить глобальный поиск совпадения или поиск с учётом регистра, включите в регулярное выражение флаги g (для глобального поиска) и i (для игнорирования регистра). Эти флаги могут использоваться вместе или по отдельности. Следующие два пример показывают, как использовать эти флаги вместе с match.
Пример. Здесь match используется для поиска подстроки 'Chapter' с последующим одним или более цифровыми символами, с последующей десятичной точкой и цифровыми символами 0 или более раз. Регулярно выражение включает флаг i, поэтому регистр символов игнорируется. <SCRIPT> str = "For more information, see Chapter 3.4.5.1"; re = /(chapter \d+(\.\d)*)/i; found = str.match(re); document.write(found); </SCRIPT>
Возвращает массив, содержащий Chapter 3.4.5.1,Chapter 3.4.5.1,.1
'Chapter 3.4.5.1' это первое совпадение и первое значение, запомненное из (Chapter \d+(\.\d)*).
'.1' это второе значение, запомненное из (\.\d).
replace
Находит совпадение регулярного выражения и строки и замещает совпавшую подстроку новой подстрокой.
Метод из |
String |
Реализован в |
JavaScript 1.2 JavaScript 1.3: поддерживается вложение функций на месте второго аргумента. |
Синтаксис replace(regexp, newSubStr) replace(regexp, function)
Версии до JavaScript 1.3: replace(regexp, newSubStr)
Параметры
regexp |
Имя регулярного выражения. Это может быть имя переменной или литерал. |
newSubStr |
Строка, помещаемая вместо строки, найденной с помощью regexp. Эта подстрока может содержать свойства объекта RegExp: $1, ., $9, lastMatch, lastParen, leftContext и rightContext. |
function |
Функция, выполняемая после выполнения поиска совпадения. |
Описание
Этот метод не изменяет String-объект, которым он вызывается; он просто возвращает новую строку.
Если Вы хотите выполнить глобальный поиск и замену или поиск без учёта регистра, включите флаги g (для глобального поиска) и i (игнорирование регистра) в регулярное выражение. Они могут быть включены вместе и отдельно. Следующие два примера показывают использование этих флагов вместе с replace.
Специфицирование функции в качестве параметра. Если Вы специфицируете функцию в качестве второго параметра, она вызывается после выполнения поиска совпадения. (Такое использование функции часто называется "лямбда-выражение".)
В Вашей функции Вы можете динамически генерировать строку, которая замещает совпавшую подстроку. Результат вызова функции используется в качестве замещающего значения.
Вложенная функция может использовать совпавшие подстроки для определения новой строки (newSubStr), которая замещает найденную подстроку. Вы получаете совпавшие подстроки через параметры Вашей функции. Первый параметр Вашей функции содержит полностью совпавшую подстроку. Другие параметры могут использоваться для совпадений в скобках, для запоминания подсовпадений строк. Например, следующий метод replaceвозвращает XX.zzzz - XX , zzzz. "XXzzzz".replace(/(X*)(z*)/, function (str, p1, p2) { return str + " - " + p1 + " , " + p2; } )
Массив, возвращённый из метода exec RegExp-объекта и последующего совпадения доступен для Вашей функции. Вы можете использовать содержимое массива плюс свойства input и index (индекс совпадения в строке ввода) этого массива для выполнения дополнительных задач, перед тем как метод заменит подстроку.
Примеры
Пример 1. Здесь регулярное выражение содержит флаги global и ignore case с разрешением методу replace замещать каждое вхождение 'apples' на 'oranges'. <SCRIPT> re = /apples/gi; str = "Apples are round, and apples are juicy."; newstr=str.replace(re, "oranges"); document.write(newstr) </SCRIPT>
Будет напечатано "oranges are round, and oranges are juicy."
Пример 2. Здесь градусы по Фаренгейту замещаются эквивалентом по Цельсию. Градусы по Фаренгейту должны быть числом с конечной F. Функция возвращает число по Цельсию с конечной С. Например, если введено 212F, функция возвращает 100C. Если введено 0F, функция возвращает -17.77777777777778C.
Регулярное выражение test проверяет числа с конечной буквой F. Число по Фаренгейту доступно для Вашей функции через параметр $1. Функция устанавливает число по Цельсию на основе значения по Фаренгейту, передаваемого в строке функции f2c. Затем f2c возвращает число по Цельсию. Эта функция напоминает флаг s///e из Perl. function f2c(x) { var s = String(x) var test = /(\d+(\.\d*)?)F\b/g return s.replace (test, myfunction ($0,$1,$2) { return (($1-32) * 5/9) + "C"; } ) }
search
Выполняет поиск совпадения между регулярным выражением и данным String-объектом.
Метод из |
String |
Реализован в |
JavaScript 1.2 |
Синтаксис search(regexp)
Параметр
regexp |
Имя регулярного выражения. Это может быть имя переменной или литерал. |
Описание
При успешном выполнении, search возвращает индекс регулярного выражения в строке. Иначе возвращает -1.
Если Вы хотите знать, найден ли патэрн в строке, используйте search (аналогично методу test регулярного выражения); для получения большей информации (и более медленного выполнения) используйте match (аналогичный методу exec регулярного выражения).
Пример
Печатается сообщение, содержание которого зависит от успешности прохождения теста. function testinput(re, str){ if (str.search(re) != -1) midstring = " contains "; else midstring = " does not contain "; document.write (str + midstring + re.source); }
small
Вызывает отображение строки шрифтом small, как при использовании тэга <SMALL>.
Метод из |
String |
Реализован в |
JavaScript 1.0, NES 2.0 |
Синтаксис small()
Описание
Используйте метод small вместе с методами write или writeln для форматирования и отображения строки в документе. В серверном JavaScript используйте функцию write для отображения строки.
Пример
Используются string-методы для изменения размера строки: var worldString="Hello, world"document.write(worldString.small()) document.write("<P>" + worldString.big()) document.write("<P>" + worldString.fontsize(7))
Предыдущий пример даст тот же вывод, что и следующий HTML: <SMALL>Hello, world</SMALL> <P><BIG>Hello, world</BIG> <P><FONTSIZE=7>Hello, world</FONTSIZE>
2. Диаграммы объектов UML. Понятия и определения. Привести примеры.
Диаграммы объектов позволяют моделировать экземпляры сущностей, которые содержатся в диаграммах классов. На диаграмме объектов показано множество объектов и отношений между ними в некоторый момент времени.
Диаграммы объектов применяют при моделировании статических видов системы с точки зрения проектирования и процессов. При этом моделируется "снимок" системы в данный момент времени и изображается множество объектов, их состояний и отношений между ними.
Диаграммы объектов важны не только для визуализации, специфицирования и документирования структурных моделей, но и для конструирования статических аспектов системы с помощью прямого и обратного проектирования.
Для человека, не знакомого с правилами игры, футбол может показаться чрезвычайно простым видом спорта - толпа народа беспорядочно бегает по полю, преследуя белый мяч. Глядя на размытые изображения движущихся тел, вряд ли можно будет различить в этом какой-либо порядок или оценить утонченность игры.
Если остановить игру и классифицировать отдельных игроков, получится совсем другая картина. В общей массе вы сможете различить нападающих, защитников и полузащитников. Копните чуть глубже, и вы поймете, как они взаимодействуют, следуя определенной стратегии, направленной на то, чтобы забить гол: ведут мяч по полю, отбирают его друг у друга и атакуют. В опытной команде вы никогда не найдете игроков, беспорядочно и бесцельно перемещающихся по полю. Напротив, в любой момент времени расположение игроков и их взаимодействия точно рассчитаны.
То же самое верно и в применении к процессу визуализации, специфицирования, конструирования и документирования программных систем'. Стараясь проследить за потоком управления в работающей системе, вы быстро потеряете общее представление о том, как организованы ее составляющие части, особенно если имеется несколько потоков. Аналогично изучение состояния одного объекта в данный момент времени не поможет понять сложную структуру данных. Чтобы решить данную проблему, придется рассмотреть не только сам объект, но и его ближайших соседей и отношения между ними. Вообще, во всех объектно-ориентированных системах, кроме самых простых, объекты не существуют сами по себе, а связаны множеством отношений с другими объектами. Более того, неполадки в таких системах связаны чаще всего не с логическими ошибками, а именно с нарушениями взаимодействия объектов или с непредвиденными изменениями их состояния.
В языке UML статические аспекты строительных блоков системы визуализируют с помощью диаграмм классов. Диаграммы взаимодействия позволяют увидеть динамические аспекты системы, включая экземпляры этих строительных блоков и сообщения, которыми они обмениваются. Диаграмма объектов содержит множество экземпляров сущностей, представленных на диаграмме классов. Таким образом, диаграммы объектов выражают статическую составляющую взаимодействия и состоят из сотрудничающих объектов, однако сообщения на них не показаны. Диаграмма объектов отражает состояние системы в фиксированный момент времени, как показано на рис.1.
Рис. 1. Диаграмма объектов
Диаграммой объектов (Object diagram) называется диаграмма, на которой показаны объекты и их отношения в некоторый момент времени. Графически диаграмму объектов представляют в виде графа, состоящего из вершин и ребер.
Общие свойства
Диаграмма объектов - это частный случай диаграммы, она имеет те же общие свойства, что и прочие диаграммы, а именно название и графическое содержание, являющееся проекцией модели. От остальных диаграмму объектов отличает ее конкретное содержание.
Содержание
Диаграммы объектов, как правило, содержат:
· объекты;
· связи.
Диаграммы объектов, как и все прочие диаграммы, могут включать в себя примечания и ограничения.
Они могут содержать также пакеты и подсистемы, используемые для группирования элементов модели в более крупные блоки. Иногда в них помещают и классы, особенно если надо визуализировать классы, стоящие за каждым экземпляром.
Типичные примеры применения
С помощью диаграмм объектов, как и с помощью диаграмм классов, моделируют статический вид системы с точки зрения проектирования (см. главу 2) или процессов, но принимая во внимание реальные экземпляры или прототипы. Это! вид описывает главным образом функциональные требования к системе, то есть услуги, которые она должна предоставлять конечным пользователям. Диаграммы объектов позволяют моделировать статические структуры данных.
При моделировании статического вида системы с точки зрения проектирования или процессов объектные диаграммы применяют для того, чтобы моделировать структуру объектов.
Моделирование структуры объектов предполагает получение "снимка" объектов системы в некоторый момент времени. Диаграммы объектов предоставляют статическую основу динамического сценария, описываемого диаграммой взаимодействия (см. главу 18). Они применяются для визуализации, специфицирования конструирования и документирования определенных экземпляров в системе, а также отношений между этими экземплярами.
Типичные приемы моделирования
Объектные структуры
Конструируя диаграмму классов, компонентов или развертывания, вы описываете группу интересующих вас абстракций и раскрываете в данном контексте их семантику и отношения с другими абстракциями в группе. Эти диаграммы отражают только потенциальные возможности. Например, если класс Асвязан с классом Вассоциацией типа "один-ко-многим", то с одним экземпляром класса Аможет быть связано пять экземпляров класса В, а с другим - только один. Кроме того, в любой конкретный момент времени экземпляр класса Аи связанные с ним экземпляры класса Вбудут иметь вполне определенные значения своих атрибутов и состояния автоматов.
Заморозив работающую систему или просто представив себе некий миг в жизни моделируемой системы, вы обнаружите совокупность объектов, каждый из которых находится в определенном состоянии и связан конкретными отношениями с другими объектами. Диаграммы объектов позволяют визуализировать, специфицировать, конструировать и документировать структуру, образуемую этими объектами. Особенно полезны они бывают при моделировании сложных структур данных.
При моделировании вида системы с точки зрения проектирования с помощью набора диаграмм классов можно полностью определить семантику абстракций и их отношений. Однако диаграммы объектов не позволяют полностью описать объектную структуру системы. У класса может быть большое количество различных экземпляров, а при наличии нескольких классов, связанных друг с другом отношениями, число возможных конфигураций объектов многократно возрастает. Поэтому при использовании диаграмм объектов нужно сосредоточиться только на изображении интересующих вас наборов конкретных объектов или объектов-прототипов. Именно это и понимается под моделированием объектной структуры - отображение на диаграмме объектов множества объектов и отношений между ними в некоторый момент времени.
Моделирование объектной структуры осуществляется так:
1. Идентифицируйте механизм, который собираетесь моделировать. Механизм представляет собой некоторую функцию или поведение части моделируемой системы, являющееся результатом взаимодействия сообщества классов, интерфейсов и других сущностей.
2. Для каждого обнаруженного механизма идентифицируйте классы, интерфейсы и другие элементы, участвующие в кооперации, а также отношения между ними.
3. Рассмотрите один из сценариев использования работы механизма. Заморозьте этот сценарий в некоторый момент времени и изобразите все объекты, участвующие в механизме.
4. Покажите состояние и значения атрибутов каждого такого объекта, если это необходимо для понимания сценария.
5. Покажите также связи между этими объектами, которые представляют экземпляры существующих ассоциаций.
В качестве примера на рис. 2 показана совокупность объектов, взятая из реализации автономного робота Внимание здесь акцентировано на нескольких объектах, составляющих часть механизма робота, предназначенного для расчета модели мира, в котором тот перемещается. Разумеется, в работе системы принимает участие гораздо больше объектов, но в этой диаграмме рассматриваются только абстракции, непосредственно вовлеченные в процесс формирования взгляда на мир.
Как видно из рисунка, один из объектов соответствует самому роботу (r, экземпляр класса Robot); в настоящий момент он находится в состоянии moving (движется). Этот объект связан с экземпляром w класса World (Мир), являющегося абстракцией модели мира робота. В свою очередь объект w связан с мультиобъектом, который состоит из экземпляров класса Element, описывающего сущности, опознанные роботом, но еще не включенные в его модель мира. Эти элементы помечены как части глобального состояния робота.
В текущий момент времени экземпляр wсвязан с двумя экземплярами класса Area. У одного из них (а2) показаны его собственные связи с тремя объектами класса Wall (Стена) и одним - класса Door ( Дверь). Указана ширина каждой из трех стен и обозначено, что каждая связана с соседними. Как видно из диаграммы, робот распознал, что замкнутое помещение, в котором он находится, имеет с трех сторон стены, а с четвертой - дверь.
Рис. 2. Моделирование объектных структур.
Прямое и обратное проектирование
Хотя прямое проектирование диаграммы объектов (создание кода на основе модели) теоретически возможно, на практике его ценность невелика. В объектно- ориентированных системах экземпляры создаются и разрушаются приложением во время работы, поэтому вы не сможете создать точно такие объекты извне.
Исключением из этого правила являются диаграммы, содержащие экземпляры компонентов и узлов. Те и другие представляют собой разновидность соответственно диаграмм компонентов и развертывания и рассматриваются ниже. Здесь отметим только, что экземпляры компонентов и узлов существуют вне работающей системы и до некоторой степени поддаются прямому проектированию.
Обратное проектирование диаграмм объектов (создание модели на основе кода) - это совершенно другое дело. Фактически, отлаживая вашу систему, вы непосредственно или с помощью каких-либо инструментов непрерывно осуществляете этот процесс. Например, чтобы отыскать "висячую" связь, необходимо реально или мысленно нарисовать диаграмму взаимодействующих объектов, которая и позволит определить, в каком месте нарушилось состояние одного из них или его отношения с другими.
Обратное проектирование объектной диаграммы осуществляется так:
1. Выберите, что именно вы хотите реконструировать. Обычно базовой точкой является какая-либо операция или экземпляр конкретного класса.
2. С помощью инструментальных средств или просто пройдясь по сценарию, зафиксируйте выполнение системы в некоторый момент времени.
3. Идентифицируйте множество интересующих вас объектов, сотрудничающих в данном контексте, и изобразите их на диаграмме объектов.
4. Если это необходимо для понимания семантики, покажите состояния объектов.
5. Чтобы обеспечить понимание семантики, идентифицируйте связи, существующие между объектами.
6. Если диаграмма оказалась слишком сложной, упростите ее, убрав объекты, не существенные для прояснения данного сценария. Если диаграмма слишком проста, включите в нее окружение некоторых представляющих интерес объектов и подробнее покажите состояние каждого объекта.
1. Создать XML – документ со сведениями о продуктах питания (наименование, состав, фирма-производитель, цена) и соответствующий XSL-обработчик. Предусмотреть возможность сортировки по полям цена и наименование.
Листингпрограммы:
product.xml
<?xml version="1.0" encoding="windows-1251"?>
<?xml-stylesheet href="product.xsl" type="text/xsl"?>
<document>
<products>
<product ID="1">
<name>Nestle Classic. Молочный шоколад</name>
<sostav>сахар, молоко сухое, какао масло, какао тертое, масло топленое, эмульгаторы, ароматизатор</sostav>
<firm>ОАО Кондитерское объединение "Россия"</firm>
<price>2000</price>
</product>
<product ID="2">
<name>Чай черный байховый Lipton Royal Ceylon</name>
<sostav>100% черный байховый цейлонский чай</sostav>
<firm>филиал ООО "Юнилевер СНГ"</firm>
<price>2250</price>
</product>
<product ID="3">
<name>Золотая медаль</name>
<sostav>какао-порошок</sostav>
<firm>ИПТЧУП "Шалу"</firm>
<price>3750</price>
</product>
<product ID="4">
<name>Сушки ванильные</name>
<sostav>мука пшеничная высшего сорта, сахар-песок, вода, масло подсолнечное, маргарин, дрожжи, соль, ванилин</sostav>
<firm>КУП "Минскхлебпром" хлебозавод №1</firm>
<price>1120</price>
</product>
</products>
</document>
product.xsl
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<h1><b><left><font color="black">Сведения о продуктах питания:</font></left></b></h1>
<link rel="stylesheet" href="style.css" type="text/css" />
<table border="2" cellspacing="2">
<tr align="center" >
<th width="250">Наименование</th>
<th width="350">Состав</th>
<th width="250">Фирма производитель</th>
<th width="150">Цена</th>
</tr>
<xsl:for-each select="document/products/product">
<xsl:sort order="ascending" select="type"/>
<tr>
<td colspan="4" width="1000"><center><xsl:value-of select="@id"/></center></td>
</tr>
<tr align="center" >
<td width="250"><xsl:value-of select="name"/></td>
<td width="350"><xsl:value-of select="sostav"/></td>
<td width="250"><xsl:value-of select="firm"/></td>
<td width="150"><xsl:value-of select="price"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
style.css
BODY{
font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
font-size: 90%;
background-image: url(images/background.jpg);
background-repeat: no-repeat;
}
TD{
margin: 0px;
padding: 0px;
font-size: 90%;
}
2. Создать JSP-приложение по учету продуктов питания в магазине. Предусмотреть возможности добавления, редактирования, поиска и удаления записей из БД (Access).
Листинг программы:
index.jsp
<%@ page contentType="text/html; charset=windows-1251" import="java.sql.*"%>
<html>
<head>
<title>Сведения о продуктах питания</title>
<script language="JavaScript" type="text/javascript">
var sel
function onRowClick() {
document.all(sel).style.setAttribute("background",null);
sel = event.srcElement.parentElement.id;
document.all(sel).style.setAttribute("background", "silver");
document.all.edtName.value=event.srcElement.parentElement.children.tags('TD').item(0).title;
document.all.edtSostav.value=event.srcElement.parentElement.children.tags('TD').item(1).title;
document.all.edtFirm.value=event.srcElement.parentElement.children.tags('TD').item(2).title;
document.all.edtPrice.value=event.srcElement.parentElement.children.tags('TD').item(3).title;
document.all.id.value=event.srcElement.parentElement.id;
}
function onButtonClick() {
if (event.srcElement.name=="btnFind") document.location.href="find.jsp";
else {
if (event.srcElement.name=="btnUpdate") document.all.cmd.value="update";
if (event.srcElement.name=="btnInsert") document.all.cmd.value="insert";
if (event.srcElement.name=="btnDelete") document.all.cmd.value="delete";
document.all.mainForm.submit();
}
}
function onColClick(s) {
document.all.order_by.value = s;
document.all.action = "index.jsp";
document.all.mainForm.submit();
}
</script>
</head>
<link rel="stylesheet" href="style.css" type="text/css" />
<body align="center">
<div align="center">
<font color="black" size="+2"><b><align="left">Сведения о продуктах питания</align></b></font>
<br><br>
<%
Connection conn;
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn = DriverManager.getConnection("jdbc:odbc:db", "dba", "sql");
String order_by = request.getParameter("order_by");
if ((order_by==null)||order_by.equalsIgnoreCase("")) order_by = "Name";
%>
<table border="1" cellpadding="3" cellspacing="0" width="1000" align="center">
<thead >