В этой главе рассматриваются все свойства и функции JavaScript, не ассоциированные с какими-либо объектами. В спецификации ECMA эти свойства и функции называются свойствами и методами объекта global.
В следующей таблице собраны свойства верхнего уровня.
| Свойство | Описание |
|---|---|
| |
| |
|
В следующей таблице собраны функции верхнего уровня.
| Функция | Описание |
|---|---|
| Возвращает 16-ричное значение - кодировку аргумента из набора символов ISO Latin-1; используется для создания строк для добавления в URL. |
| Вычисляет строку кода JavaScript без ссылки на определённый объект. |
| Вычисляет аргумент с целью определить, является ли он конечным числом. |
| Вычисляет аргумент с целью определить, является ли он не-числом. |
| |
| Разбирает строковой аргумент и возвращает число с плавающей точкой. |
| |
| |
| |
| Возвращает ASCII-строку для специфицированного 16-ричного кодового значения. |
|
Возвращает 16-ричное значение - кодировку аргумента из набора символов ISO Latin-1.
escape("string")
string |
escape это функция верхнего уровня, не ассоциированная с каким-либо объектом.
Используйте функции escape и unescape
для кодирования и декодирования (добавления вручную значений свойств) Uniform Resource Locator (URL), Uniform Resource Identifier
(URI) или строки URI-типа.
Функция escape кодирует специальные символы в специфицированной
строке и возвращает новую строку. Она кодирует пробелы, знаки пунктуации и любой
другой символ, не являющийся алфавитным или числовым ASCII-символом, за
исключением следующих символов:
* @ - _ + . /
Unicode.
Функции escape и unescape не используют Unicode, как
указано в спецификации ECMA. Вместо этого они используют указания Internet Engineering Task Force (IETF)
для заменяющих/escaping символов. В URI символы используют US-ASCII-символы
(набор символов ISO-Latin-1). URI это последовательность символов из базового
латинского алфавита, цифры и несколько специальных символов (например, / и @).
Еscape-последовательности не поддерживают как Unicode-значения \uXXXX или %uXXXX, как
специфицировано ECMA, но поддерживают %XX, где XX это 16-ричное число из двух
цифр (например, %7E). В URI представлены восьмеричными числами, как 8-битные байты.
Чтобы escape и unescape могли работать с
поддерживаемыми Web-сервером URL и URI, JavaScript не использует Unicode для этих функций.
escape возвращает 16-ричную кодировку специфицированной строки из
набора символов ISO-Latin-1.unescape возвращает ASCII-строку, последовательность символов из набора ISO-Latin-1.Unicode-специфичные escape-последовательности %uXXXX не поддерживаются.
Пример 1. Этот пример возвращает "%26":
escape("&") // возвращает "%26"
Пример 2. Следующий оператор возвращает строку кодированных символов для пробелов, запятых и апострофов.
// возвращает "The_rain.%20In%20Spain%2C%20Ma%92am"
escape("The_rain. In Spain, Ma'am")
unescapeВычисляет строку кода JavaScript без ссылки на определённый объект.
eval(string)
string | Строка, представляющая выражение, оператор или последовательность операторов JavaScript. Выражение может содержать переменные и свойства существующих объектов. |
eval это функция верхнего уровня, не ассоциированная с каким-либо объектом.
Аргументом функции eval является строка. Если строка представляет
выражение, eval вычисляет выражение. Если аргумент
представляет собой один или более операторов JavaScript, eval
выполняет эти операторы. Не вызывайте eval для вычисления
арифметических выражений; JavaScript вычисляет арифметические выражения автоматически.
Если Вы конструируете арифметическое выражение как строку, Вы можете в
дальнейшем использовать eval для его вычисления. Например,
предположим, у Вас имеется переменная x. Вы можете отсрочить
вычисление выражения, включающего x, присвоив строковое значение
выражения, скажем, "3 * x + 2", переменной и
вызвав eval в скрипте позднее.
Если аргументом eval не является строка, eval
возвращает the аргумент без изменений. В следующем примере специфицируется String-конструктор,
и eval возвращает String-объект вместо вычисления строки.
eval(new String("2+2")) // возвращает String-объект, содержащий "2+2"
eval("2+2") // возвращает 4
Вы не должны использовать неявные вызовы функции eval по имени,
отличному от eval. Например, Вы не должны использовать такой код:
var x = 2
var y = 4
var myEval = eval
myEval("x + y")
JavaScript 1.1.
eval является также методом всех
объектов. Этот метод описан в классе Object.
Следующие примеры отображают вывод с помощью document.write. В
серверном JavaScript можно отобразить тот же самый вывод через вызов функции write
вместо использования document.write.
Пример 1. В этом коде оба оператора, содержащие eval,
возвращают 42. Первый вычисляет строку "x + y + 1"; второй вычисляет строку "42".
var x = 2
var y = 39
var z = "42"
eval("x + y + 1") // возвращает 42
eval(z) // возвращает 42
Пример 2. В следующем примере функция getFieldName(n)
возвращает имя специфицированного элемента формы как строку. Первый оператор
присваивает строковое значение третьего элемента формы переменной field.
Второй оператор использует eval для отображения значения элемента формы.
var field = getFieldName(3)
document.write("The field named ", field, " has value of ",
eval(field + ".value"))
Пример 3. Здесь eval используется для вычисления строки str.
Эта строка состоит из операторов JavaScript, которые открывают диалоговое окно Alert
и присваивают переменной z значение 42, если x равен
пяти, и присваивают переменной z 0 в ином случае. Если второй
оператор выполняется, eval вызывает выполнение этих операторов, а
также вычисляет набор операторов и возвращает значение, присвоенное переменной z.
var str = "if (x == 5) {alert('z is 42'); z = 42;} else z = 0; "
document.write("<P>z is ", eval(str))
Пример 4. В следующем примере функция setValue использует eval
для присвоения значения переменной newValue текстовому полю textObject:
function setValue (textObject, newValue) {
eval ("document.forms[0]." + textObject + ".value") = newValue
}
Пример 5. В этом примере создаётся breed как свойство
объекта myDog, а также как переменная. Первый оператор write
использует eval('breed') без специфицирования объекта; строка "breed"
вычисляется безотносительно какого-либо объекта, а метод write
выводит "Shepherd", что является значением переменной breed.
Второй оператор write использует myDog.eval('breed'), что
специфицирует объект myDog; строка "breed" вычисляется
с учётом объекта myDog, а метод write выводит "Lab",
что является значением свойства breed объекта myDog.
function Dog(name,breed,color) {
this.name=name
this.breed=breed
this.color=color
}
myDog = new Dog("Gabby")
myDog.breed="Lab"
var breed='Shepherd'
document.write("<P>" + eval('breed'))
document.write("<BR>" + myDog.eval('breed'))
Метод
Object.eval
Числовое значение, представляющее бесконечность.
JavaScript 1.3 (В предыдущих версиях | |
Infinity
Infinity это свойство верхнего уровня, не ассоциированное с
каким-либо объектом.
Начальным значением Infinity является Number.POSITIVE_INFINITY.
Значение Infinity (положительная бесконечность) больше любого
другого числа, включая себя самого. Это значение математически ведёт себя как
бесконечность; например, что-либо, умноженное на Infinity, даёт Infinity,
что-нибудь, делённое на Infinity даёт 0.
Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITYВычисляет аргумент с целью определить, является ли он конечным числом.
isFinite(number)
number |
isFinite это функция верхнего уровня, не ассоциированная с каким-либо объектом.
Можно использовать этот метод для того чтобы определить, является ли данное
число конечным. Метод isFinite проверяет число-аргумент. Если
аргумент равен NaN, положительной или отрицательной бесконечности,
метод возвращает false, иначе возвращает true.
Можно проверить ввод клиента, чтобы определить, введено ли конечное число.
if(isFinite(ClientInput) == true)
{
/* некоторые действия */
}
Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITYВычисляет аргумент с целью определить, является ли он не-числом.
isNaN(testValue)
testValue |
isNaN это функция верхнего уровня, не ассоциированная с каким-либо объектом.
На платформах, поддерживающих NaN, функции parseFloat и parseInt
возвращают NaN, если вычисляют значение, не являющееся числом. isNaN
возвращает true, если передано NaN, и false - в ином случае.
Этот пример вычисляет floatValue для определения, является ли оно
числом, а затем вызывает соответствующую процедуру:
floatValue=parseFloat(toFloat)
if (isNaN(floatValue)) {
notFloat()
} else {
isFloat()
}
Number.NaN, parseFloat,
parseIntЗначение, представляющее Not-A-Number/Не-Число.
JavaScript 1.3 (В предыдущих версиях, | |
NaN
NaN это свойство верхнего уровня, не ассоциированное с каким-либо объектом.
Начальным значением NaN является NaN.
NaN всегда не равно любому другому числу, включая само NaN; Вы не
можете проверить на значение not-a-number путём сравнения с Number.NaN.
Вместо этого используйте функцию isNaN.
Некоторые методы JavaScript (такие как конструктор Number, parseFloat
и parseInt) возвращают NaN, если значение,
специфицированное в параметре, не является числом.
Вы можете использовать свойство NaN для указания на ошибочное
условие функции, которая должна возвращать верное число.
isNaN, Number.NaNКонвертирует специфицированный объект в число.
Number(obj)
obj |
Number это функция верхнего уровня, не ассоциированная с каким-либо объектом.
Если объект является Date-объектом, Number
возвращает значение в миллисекундах, отмеренное от даты 1 января 1970 года UTC (GMT),
положительное - после этой даты, негативное - до.
Если obj это строка, которая не содержит правильно оформленного
числового литерала, Number возвращает NaN.
Date-объект конвертируется в числовое значение:
d = new Date ("December 17, 1995 03:24:00")
alert (Number(d))
Выводится диалоговое окно, содержащее "819199440000."
NumberРазбирает строковой аргумент и возвращает число с плавающей точкой.
parseFloat(string)
string | Строка, представляющая значение, которое Вы хотите разобрать/parse. |
parseFloat это функция верхнего уровня, не ассоциированная с каким-либо объектом.
parseFloat разбирает свой аргумент, строку, и возвращает число с
плавающей точкой. Если он обнаруживает символ, отличный от знака (+ или -),
цифры (0-9) и десятичной точки, или экспоненты, он возвращает значение до этой
точки и игнорирует этот и все последующие символы. Ведущие и ведомые пробелы разрешаются.
Если первый символ не может быть конвертирован в число, parseFloat возвращает NaN.
Для арифметических целей значение NaN является не-числом для любой
основы/radix. Вы можете вызвать функцию isNaN, чтобы определить,
является ли результат работы parseFloat значением NaN.
Если NaN передаётся арифметической операции, результат операции также будет NaN.
Все следующие строки возвращают 3.14:
parseFloat("3.14")
parseFloat("314e-2")
parseFloat("0.0314E+2")
var x = "3.14"
parseFloat(x)
Следующий пример возвращает NaN:
parseFloat("FF2")isNaN, parseIntРазбирает строковой аргумент и возвращает целое число со специфицированным radix или базой.
parseInt(string[, radix])
string | |
radix | Целое число, представляющее основание/radix return-значения. |
parseInt это функция верхнего уровня, не ассоциированная с
каким-либо объектом.
Функция parseInt разбирает свой первый аргумент, строку, и пытается
возвратить целое число - специфицированный radix (основание). Например, radix 10
указывает на конвертацию в десятеричное число, 8 - в восьмеричное, 16 - в
шестнадцатеричное, и т.д. Для оснований больше 10, буквы латинского алфавита
обозначают цифры больше 9. Например, для 16-ричных чисел (основание 16) используются буквы от A до F включительно.
Если parseInt обнаруживает символ, который не является числом для
специфицированного radix, он игнорирует это число и все последующие символы и
возвращает целочисленное значение, разобранное до этой точки. parseInt
усекает числа до целочисленных значений. Ведущие и ведомые пробелы допускаются.
Если radix не специфицирован или специфицирован как 0, JavaScript принимает следующее:
string ввода начинается с "0x", radix равен 16 (16-ричное
основание).string ввода начинается с "0", radix
восьмеричный.string ввода начинается с любого другого значения, radix
равен 10 (10-рчное основание).
Если первый символ не может быть конвертирован в число, parseInt возвращает NaN.
Для арифметических целей значение NaN является не-числом при любом radix.
Вы можете высколько
правил, одно, имеющее больший вес, будет
иметь приоритет.
По умолчанию правила авторской таблицы стилей имеют больший вес, чем правила таблицы стилей пользователя. Преимущество зарезервировано, однако, для правил "!important". Все правила пользователя и автора имеют больший вес, чем правила таблицы стилей по умолчанию в ПА.
Импортируемы таблицы стилей также каскадируются, и их вес зависит от порядка импортирования. Правила, специфицированные в имеющейся таблице стилей, переопределяют правила, импортируемые из других таблиц. Импортированные таблицы стилей сами могут импортировать и переопределять другие таблицы стилей рекурсивно, и тогда применяются те же правила приоритета.
Чтобы найти значение для комбинации элемент/свойство, ПА обязаны применять следующий порядок сортировки:
Независимо от установок "!important" индивидуальных объявлений, эта стратегия даёт авторским таблицам стилей больший вес, чем таблицам читателя. Это тем более важно, поскольку ПА предоставляют пользователю возможность отключить влияние определённых таблиц стилей, например, в выпадающих меню.
CSS пытается создать баланс между авторскими и пользовательскими таблицами стилей. По умолчанию правила авторской таблицы стилей переопределяют правила пользовательской таблицы (см. каскадное правило 3).
Однако, для баланса, объявление "!important" (ключевое слово "!" и "important" следуют за объявлением) имеет преимущество перед нормальной декларацией. И авторские, и пользовательские таблицы стилей могут содержать объявление "!important", и пользовательские правила "!important" переопределяют авторские "!important". Это свойство CSS улучшает доступность документов путём предоставления пользователям со специфическими требованиями (крупные шрифты, комбинации цветов и т.п.) контроля над представлением.
Примечание. Это семантическое изменение в сравнении с CSS1. В CSS1 авторские правила "!important" имели приоритет перед пользовательскими правилами "!important".
Объявление сокращённого свойства (например, 'background') как "!important" эквивалентно объявлению всех его подсвойств как "!important".
Первое правило пользовательской таблицы стилей в данном примере содержит объявление "!important", которое переопределяет соответствующее объявление в авторской таблице стилей. Второе объявление также будет иметь приоритет как помеченное "!important". Однако третье правило пользовательской таблицы стилей - не "!important" - и поэтому будет отброшено в пользу второго правила авторской таблицы стилей (которое устанавливает стиль сокращённого свойства). Таким образом, третье авторское правило будет отброшено в пользу второго авторского правила, поскольку второе правило - "!important". Это показывает, что объявления "!important" имеют действие также и внутри авторских таблиц стилей.
/* Из пользовательской таблицы стилей */
P { text-indent: 1em ! important }
P { font-style: italic ! important }
P { font-size: 18pt }
/* Из авторской таблицы стилей */
P { text-indent: 1.5em !important }
P { font: 12pt sans-serif !important }
P { font-size: 24pt }
Специфика селектора высчитывается так:
Конкатенация трёх чисел a-b-c (в числовой системе с большой базой) дают специфику.
* {} /* a=0 b=0 c=0 -> специфика = 0 */
LI {} /* a=0 b=0 c=1 -> специфика = 1 */
UL LI {} /* a=0 b=0 c=2 -> специфика = 2 */
UL OL+LI {} /* a=0 b=0 c=3 -> специфика = 3 */
H1 + *[REL=up]{} /* a=0 b=1 c=1 -> специфика = 11 */
UL OL LI.red {} /* a=0 b=1 c=3 -> специфика = 13 */
LI.red.level {} /* a=0 b=2 c=1 -> специфика = 21 */
#x34y {} /* a=1 b=0 c=0 -> специфика = 100 */
В HTML значения атрибута "style" элемента являются правилами таблицы стилей. Эти правила не имеют селекторов, но для целей шага 3 каскадного алгоритма они рассматриваются как имеющие селектор ID (специфика: a=1, b=0, c=0). Для целей шага 4 они рассматриваются после всех других правил.
<HEAD>
<STYLE type="text/css">
#x97z { color: blue }
</STYLE>
</HEAD>
<BODY>
<P ID=x97z style="color: red">
</BODY>
В данном примере цвет элемента P будет красным. Хотя специфика - одна и та же для обоих объявлений, объявление атрибута "style" переопределит объявление в элементе STYLE в соответствии с каскадным правилом 4.
ПА могут предпочесть подсказки (hints) из других источников, а не из таблиц стилей, например, элемент FONT или атрибут "align" в HTML. Если это так, не-CSS подсказки обязаны быть переведены в соответствующие правила CSS со спецификой=0. Принимается, что правила находятся в начале авторской таблицы стилей и могут быть переопределены последующими правилами таблиц стилей.
Примечание. В фазе переноса эта политика облегчит сосуществование стилистических атрибутов с таблицами стилей.
Примечание. В CSS1 не-CSS подсказки получали специфику=1, а не 0. Это изменение сделано из-за введения универсального селектора, имеющего специфику 0.