В этом разделе рассмотрены предопределённые объекты ядра 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. Наполнение массива
Вы можете заполнить массив путём присвоения значений его элементам. Например,
Вы можете также заполнить массив при его создании:
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-объект имеет следующие методы:
concat объединяет два массива и возвращает новый массив;
join объединяет все элементы массива в строку;
pop удаляет последний элемент массива и возвращает этот элемент;
push добавляет один или более элементов в конец массива и возвращает эти последние добавленные элементы;
reverse разворачивает элементы массива: первый элемент становится последним, а последний – первым;
shift удаляет первый элемент массива и и возвращает этот элемент;
slice извлекает часть массива и возвращает новый массив;
splice добавляет и/или удаляет элементы из массива;
sort сортирует элементы массива;
unshift добавляет один или более элементов в начало массива и возвращает новый размер массива.
Например, вы определили следующий массив:
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:
Ели массив является результатом совпадения регулярного выражения и строки, этот массив возвращает свойства и элементы, предоставляющие информацию о совпадении. Массив является return-значением методов RegExp.exec, String.match и String.split.
2. Объект Boolean
Объект Boolean является оболочкой вокруг примитивного типа данных Boolean. Для создания Boolean-объекта используйте следующий синтаксис:
booleanObjectName = new Boolean(value)
Не путайте примитивные Boolean-значения true и false со значениями true и falseBoolean-объекта. Любой объект, значение которого не 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 в этом синтаксисе могут быть:
пустыми: вводятся текущие время и дата. Например, today = new Date();
строкой, представляющей дату в следующем формате: «месяц день, год час:минуты:секунды.» Например, Xmas95 = new Date(«December 25, 1995 13:30:00»). Если Вы пропустите часы, минуты или секунды, значение будет установлено в нуль.
набором целочисленных значений для года, месяца и дня. Например, Xmas95 = new Date(1995,11,25). Набором значений для года, месяца, дня, часов, минут и секунд. Например, Xmas95 = new Date(1995,11,25,9,30,0).
3.1. JavaScript 1.2 и ранее.
Объект Date ведёт себя так:
Даты до 1970 не допускаются.
JavaScript зависит от специфики поведения даты на конкретной платформе; поведение Date-объекта варьируется от платформы к платформе.
3.2. Методы объекта Date
Методы объекта Date для работы с датами и временем подразделяются на следующие категории:
set методы для установки значений даты времени в Date-объектах;
get методы для получения значений даты времени из Date-объектов;
to методы для возвращения строковых значений из Date-объектов;
методы parse и UTC для разбора Date-строк.
С помощью методов get и set вы можете по отдельности получать и устанавливать значения секунд, минут, часа, дня месяца, дня недели, месяца и года. Имеется метод getDay, возвращающий день недели, но отсутствует парный метод setDay, поскольку день недели устанавливается автоматически. Эти методы используют целые числа для представления своих значений:
Секунд и минут: от 0 до 59
Часа: от 0 до 23
Дня недели: от 0 (воскресенье) до 6 (суббота)
Даты: от 1 до 31 (день месяца)
Месяца: от 0 (январь) до 11 (декабрь)
Года: годы после 1900
Например, вы определили следующую дату:
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()}
Вы можете назначить функцию обработчику события одним из следующих способов:
Создание переменной setBGColor, показанное выше, аналогично объявлению следующей функции:
function setBGColor() {
document.bgColor='antiquewhite'
}
Присвоение функции переменной похоже на объявление функции, но есть и отличия:
Если вы присваиваете функцию переменной, используя var setBGColor = new Function(«...»), setBGColor является переменной, для которой текущим значением является ссылка на функцию, созданную оператором new Function().
Если вы создаёте функцию, используя function setBGColor() {...}, setBGColor не является переменной. Это имя функции.
Вы можете вложить одну функцию в другую. Вложенная (внутренняя) функция является 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/бесконечность. Вы не можете изменить значения этих свойств и будете использовать их таким образом:
Вы всегда обращаетесь к свойствам предопределённого объекта 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-экземпляров.