Wiki-учебник по веб-технологиям: JavaScript/ПредопределённыеОбъектыЯдра ...

Главная | |

Предопределённые объекты ядра

Оглавление документа

В этом разделе рассмотрены предопределённые объекты ядра JavaScript: Array, Boolean, Date, Function, Math, Number, RegExp и String.

1. Объект Array


В JavaScript нет отдельного типа для массива данных. Однако вы можете использовать предопределённый объект Array и его методы для работы с массивами в ваших приложениях. Объект Array имеет методы для манипулирования массивами: объединения, разворачивания и сортировки. Он имеет также свойство для определения размера массива и другие свойства для использования с регулярными выражениями.

Массив это упорядоченный набор значений, к которым можно обращаться по имени и по индексу. Например, вы имеете массив emp, содержащий имена служащих, индексированный по именам служащих. Так, emp[1] это служащий номер 1, emp[2] – служащий номер 2 и так далее.

1.1. Создание массива


Чтобы создать Array-объект:

1. arrayObjectName = new Array(element0, element1, ..., elementN)
2. arrayObjectName = new Array(arrayLength)


arrayObjectName это имя нового объекта, либо свойство существующего объекта. При использовании Array-свойств и методов, arrayObjectName это либо имя существующего Array-объекта, либо свойство существующего объекта.

element0, element1, ..., elementN это список значений элементов массива. Когда специфицирована эта форма, массив инициализируется специфицированными значениями в качестве элементов массива, а свойство length массива устанавливается в количество аргументов.

arrayLength это начальный размер массива. Следующий код создаёт массив из 5 элементов:

billingMethod = new Array(5)


Литералы массива также являются Array-объектами; например, нижеследующий литерал является Array-объектом.

coffees = ["French Roast", "Columbian", "Kona"]


1.2. Наполнение массива


Вы можете заполнить массив путём присвоения значений его элементам. Например,

emp[1] = "Casey Jones"
emp[2] = "Phil Lesh"
emp[3] = "August West"


Вы можете также заполнить массив при его создании:

myArray = new Array("Hello", myVar, 3.14159)


1.3. Обращение к элементам массива


Вы можете обратиться к элементам массива через использование порядкового номера элемента. Например, вы определили массив:

myArray = new Array("Wind","Rain","Fire")


Затем вы обращаетесь к первому элементу массива myArray[0], а ко второму элементу – myArray[1].

Индексы элементов начинаются с нуля (0), но размер массива (например, myArray.length) отражает точное количество элементов в массиве.

1.4. Array-методы


Array-объект имеет следующие методы:


Например, вы определили следующий массив:

myArray = new Array("Wind","Rain","Fire")


myArray.join() возвращает "Wind,Rain,Fire";
myArray.reverse переворачивает массив так, что myArray[0] будет "Fire", myArray[1] - "Rain", а myArray[2] - "Wind".
myArray.sort сортирует массив так, что myArray[0] будет "Fire", myArray[1] - "Rain", в myArray[2] - "Wind".


1.5. Двухмерные массивы


Следующий код создаёт двухмерный массив:

a = new Array(4)
for (i=0; i < 4; i++) {
   a[i] = new Array(4)
   for (j=0; j < 4; j++) {
      a[i][j] = "["+i+","+j+"]"
   }
}


Создаётся массив, состоящий из следующих рядов/rows:

Row 0:[0,0][0,1][0,2][0,3]
Row 1:[1,0][1,1][1,2][1,3]
Row 2:[2,0][2,1][2,2][2,3]
Row 3:[3,0][3,1][3,2][3,3]


1.6. Массивы и регулярные выражения


Ели массив является результатом совпадения регулярного выражения и строки, этот массив возвращает свойства и элементы, предоставляющие информацию о совпадении. Массив является return-значением методов RegExp.exec, String.match и String.split.

2. Объект Boolean


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

booleanObjectName = new Boolean(value)


Не путайте примитивные Boolean-значения true и false со значениями true и false Boolean-объекта. Любой объект, значение которого не undefined, null, 0, NaN или не пустая строка, включая Boolean-объект со значением false, вычисляется в true при передаче условному оператору.

3. Объект Date


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

JavaScript обрабатывает даты аналогично Java. Эти два языка имеют много аналогичных date-методов и оба хранят даты как количество миллисекунд, прошедших после 1 января 1970 года, 00:00:00.

Объект Date имеет диапазон значений от 100,000,000 до 100,000,000 дней в обе стороны от 01 января 1970 года UTC (Всемирного Времени).

Для создания Date-объекта:

dateObjectName = new Date([parameters])

где dateObjectName это имя создаваемого Date-объекта; это может быть новый объект или свойство существующего объекта.

Параметры/parameters в этом синтаксисе могут быть:


3.1. JavaScript 1.2 и ранее.


Объект Date ведёт себя так:


3.2. Методы объекта Date


Методы объекта Date для работы с датами и временем подразделяются на следующие категории:


С помощью методов “get” и “set” вы можете по отдельности получать и устанавливать значения секунд, минут, часа, дня месяца, дня недели, месяца и года. Имеется метод getDay, возвращающий день недели, но отсутствует парный метод setDay, поскольку день недели устанавливается автоматически. Эти методы используют целые числа для представления своих значений:


Например, вы определили следующую дату:

Xmas95 = new Date("December 25, 1995")


Тогда Xmas95.getMonth() возвратит 11, а Xmas95.getFullYear() возвратит 1995.

Методы getTime и setTime используются при сравнении дат. Метод getTime возвращает количество миллисекунд, прошедших после 1 января 1970 года, 00:00:00, для Date-объекта.

Например, следующий код выводит количество дней, оставшихся до конца текущего года:

today = new Date()
endYear = new Date(1995,11,31,23,59,59,999) // Устанавливает день и месяц
endYear.setFullYear(today.getFullYear()) // Устанавливает год в текущее значение
msPerDay = 24 * 60 * 60 * 1000 // Количество миллисекунд в день
daysLeft = (endYear.getTime() - today.getTime()) / msPerDay
daysLeft = Math.round(daysLeft) //возвращает количество оставшихся в этом году дней


Этот пример создаёт Date-объект по имени today, содержащий текущую дату. Затем создаётся Date-объект endYear и в него устанавливается текущее значение года. Затем, путём использования количества миллисекунд в день, вычисляется количество дней от сегодняшнего числа до endYear через использование метода getTime и оно округляется до целого количества дней.

Метод parse применяется для присвоения значений date-строк существующим Date-объектам. Например, следующий код использует методы parse и setTime для присвоения значения даты объекту IPOdate:

IPOdate = new Date()
IPOdate.setTime(Date.parse("Aug 9, 1995"))


3.3. Использование объекта Date: пример


В этом примере функция JSClock() возвращает время в формате электронного циферблата:

function JSClock() {
   var time = new Date()
   var hour = time.getHours()
   var minute = time.getMinutes()
   var second = time.getSeconds()
   var temp = "" + ((hour > 12) ? hour - 12 : hour)
   if (hour == 0)
      temp = "12";
   temp += ((minute < 10) ? ":0" : ":") + minute
   temp += ((second < 10) ? ":0" : ":") + second
   temp += (hour >= 12) ? " P.M." : " A.M."
   return temp
}


Функция JSClock сначала создаёт новый Date-объект time; поскольку аргументы не заданы, time создаётся с текущими датой и временем. Затем вызываются методы getHours, getMinutes и getSeconds, присваивающие текущие значения часа, минут и секунд переменным hour, minute и second.

Следующие 4 оператора строят строковое значение на базе time. Первый оператор создаёт переменную temp, присваивая её значение путём использования условного выражения; если hour больше 12, (hour – 12), иначе просто hour*, если только hour** не 0, тогда он становится 12.

Следующий оператор присоединяет значение minute к temp. Если значение minute меньше 10, условное выражение прибавляет строку с предшествующим нулём; иначе добавляется строка с разделяющим двоеточием. Затем оператор присоединяет второе значение к temp тем же способом.

Наконец, условное выражение присоединяет “PM” к temp, если hour равен 12 или больше; иначе присоединяется “AM”.

4. Объект Function


Предопределённый объект Function специфицирует строку кода JavaScript, которая компилируется как функция.

Создание Function-объекта:

functionObjectName = new Function ([arg1, arg2, ... argn], functionBody)

functionObjectName это имя переменной или свойства существующего объекта. Это также может быть объект с последующим именем обработчика события, в нижнем регистре, таким как window.onerror.

arg1, arg2, ..., argn это аргументы, используемые функцией в качестве имён формальных аргументов. Каждый обязан быть строкой, соответствующей верному идентификатору JavaScript; например, “x” или “theForm”.

functionBody это строка, специфицирующая код JavaScript, компилируемый как тело функции.

Function-объекты вычисляются всякий раз при их использовании. Это менее эффективно, чем объявление функции и вызов её в коде, поскольку объявленные функции компилируются.

Следующий код присваивает функцию переменной setBGColor. Эта функция устанавливает цвет фона документа.

var setBGColor = new Function("document.bgColor='antiquewhite'")


Чтобы вызвать Function-объект, вы можете специфицировать имя переменной так, будто это функция. Следующий код выполняет функцию, специфицированную переменной setBGColor:

var colorChoice="antiquewhite"
if (colorChoice=="antiquewhite") {setBGColor()}


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

1. document.form1.colorButton.onclick=setBGColor
2. <INPUT NAME="colorButton" TYPE="button"
      VALUE="Change background color"
      onClick="setBGColor()">


Создание переменной setBGColor, показанное выше, аналогично объявлению следующей функции:

function setBGColor() {
   document.bgColor='antiquewhite'
}


Присвоение функции переменной похоже на объявление функции, но есть и отличия:


Вы можете вложить одну функцию в другую. Вложенная (внутренняя) функция является private для своего контейнера (внешней функции):


5. Объект Math


Предопределённый объект Math имеет свойства и объекты для работы с математическими константами и функциями. Например, свойство PI объекта Math имеет значение pi (3.141...), которое вы можете использовать в приложении таким образом:

Math.PI


Аналогично и стандартные математические функции являются методами объекта Math. Сюда входят тригонометрические, логарифмические, экспоненциальные и другие функции. Например, Если вы хотите использовать тригонометрическую функцию sin/синус, вы можете записать:

Math.sin(1.56)


Заметьте, что все тригонометрические методы объекта Math принимают аргументы в радианах.

В таблице содержится резюме по методам объекта Math.

Метод Описание
abs Абсолютное значение.
sin, cos, tan Стандартные тригонометрические функции; аргумент в радианах.
acos, asin, atan, atan2 Инверсные тригонометрические функции; возвращают значения в радианах.
exp, logЭкспоненциальный и натуральный логарифмы, база e.
ceil Возвращает ближайшее целое число, больше или равное аргументу.
floorВозвращает наибольшее целое число, меньше или равное аргументу.
min, maxВозвращает больший или меньший (соответственно) из двух аргументов.
powСтепень; первый аргумент это база, второй показатель степени.
randomВозвращает случайное число в диапазоне от 0 до 1.
roundОкругляет аргумент до ближайшего целого.
sqrt Квадратный корень.

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

6. Объект Number


Объект Number содержит свойства для работы с числовыми константами, такими как максимальное значение, not-a-number и infinity/бесконечность. Вы не можете изменить значения этих свойств и будете использовать их таким образом:

biggestNum = Number.MAX_VALUE
smallestNum = Number.MIN_VALUE
infiniteNum = Number.POSITIVE_INFINITY
negInfiniteNum = Number.NEGATIVE_INFINITY
notANum = Number.NaN


Вы всегда обращаетесь к свойствам предопределённого объекта Number так, как показано выше, а не как к свойствам Number-объекта, созданного вами.

В таблице дано резюме по свойствам объекта Number.

СвойствоОписание
MAX_VALUEНаибольшее представимое число.
MIN_VALUEНаименьшее представимое число.
NaNСпециальное значение «not a number/не число».
NEGATIVE_INFINITYСпециальное значение отрицательной бесконечность; возвращается при переполнении.
POSITIVE_INFINITYСпециальное значение положительной бесконечности; возвращается при переполнении.

Прототип Number предоставляет методы для запроса информации от Number-объектов в разных форматах. В следующей таблице дано резюме по методам Number.prototype.

МетодОписание
toExponentialВозвращает строку – число в экспоненциальной нотации.
toFixedВозвращает строку – число в нотации с плавающей точкой.
toPrecisionВозвращает строку – число специфицированной точности в нотации с плавающей точкой.
toSourceВозвращает литерал объекта – специфицированный Number-объект; вы можете использовать это значение для создания нового объекта. Переопределяет метод Object.toSource.
toStringВозвращает строку – специфицированный объект. Переопределяет метод Object.toString.
valueOfВозвращает примитивное значение специфицированного объекта. Переопределяет метод Object.valueOf.

7. Объект RegExp


Объект RegExp позволяет работать с регулярными выражениями.

8. Объект 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) //возвращает число 4
eval(s2) //возвращает строку "2 + 2"


Объект String имеет только одно свойство, length, которое обозначает количество символов в строке. Например, следующий код присваивает переменной x значение 13, так как строка “Hello, World!” содержит 13 символов:

myString = "Hello, World!"
x = mystring.length


Объект String имеет методы двух типов: возвращающие варианты самой строки, такие методы как substring и toUpperCase, и методы, которые возвращают HTML-форматированную версию строки, такие методы как bold и link.

Например, используя предыдущий пример, и mystring.toUpperCase() и “hello, world!”. **toUpperCase() возвращают строку “HELLO, WORLD!”

Метод substring принимает два аргумента и возвращает подстроку между двумя аргументами. Используя предыдущий пример, mystring.substring(4, 9) возвращает строку “o, Wo”.

Объект String имеет также несколько методов для автоматического HTML-форматирования, такие как bold – для создания текста с «жирным» шрифтом и link – для создания гиперссылки. Например, вы можете создать гиперссылку на гипотетический URL методом link:

mystring.link("http://www.helloworld.com")


В таблице дано резюме по методам String-экземпляров.

МетодОписание
anchorСоздаёт именованный «якорь» HTML.
big, blink, bold, fixed, italics, small, strike, sub, supФорматируют строку HTML.
charAt, charCodeAtВозвращают символ или код символа в специфицированной позиции в строке.
indexOf, lastIndexOfВозвращают позицию специфицированной подстроки в строке или последнюю позицию специфицированной подстроки, соответственно.
linkСоздаёт гиперссылку HTML.
concatОбъединяет текст двух строк и возвращает новую строку.
fromCharCodeКонструирует строку из специфицированной последовательности значений Unicode. Это метод класса String, а не String-экземпляра.
splitДелит String-объект на массив строк, разделяя строку на подстроки.
sliceИзвлекает часть строки и возвращает новую строку.
substring, substrВозвращает специфицированный поднабор строки, специфицируя либо начальный и конечный индексы, либо начальный индекс и размер.
match, replace, searchРабота с регулярными выражениями.
toLowerCase, toUpperCaseВозвращает все символы в строке в нижнем или верхнем регистре, соответственно.