Оглавление | Назад | Вперёд | Индекс

Глава 2
Свойства и Функции
Верхнего Уровня

В этой главе рассматриваются все свойства и функции JavaScript, не ассоциированные с какими-либо объектами. В спецификации ECMA эти свойства и функции называются свойствами и методами объекта global.

В следующей таблице собраны свойства верхнего уровня.

Таблица  2.1  Свойства верхнего уровня
Свойство Описание
Infinity

Числовое значение, представляющее бесконечность.

NaN

Значение, представляющее Not-A-Number/Не-Число.

undefined

Значение undefined.

В следующей таблице собраны функции верхнего уровня.

Таблица 2.2  Функции верхнего уровня
Функция Описание
escape

Возвращает 16-ричное значение - кодировку аргумента из набора символов ISO Latin-1; используется для создания строк для добавления в URL.

eval

Вычисляет строку кода JavaScript без ссылки на определённый объект.

isFinite

Вычисляет аргумент с целью определить, является ли он конечным числом.

isNaN

Вычисляет аргумент с целью определить, является ли он не-числом.

Number

Конвертирует объект в число.

parseFloat

Разбирает строковой аргумент и возвращает число с плавающей точкой.

parseInt

Разбирает строковой аргумент и возвращает целое число.

String

Конвертирует объект в строку.

taint

Добавляет разрушение данных к элементу данных или скрипту.

unescape

Возвращает ASCII-строку для специфицированного 16-ричного кодового значения.

untaint

Убирает разрушение данных с элемента данных или скрипта.

escape


Возвращает 16-ричное значение - кодировку аргумента из набора символов ISO Latin-1.

Функция ядра

Реализована в

JavaScript 1.0, NES 2.0

Версия ECMA

ECMA-262-совместимая, исключая символы Unicode.

Синтаксис

escape("string")

Параметр

string

Строка из набора символов ISO-Latin-1.

Описание

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 для этих функций.

Unicode-специфичные escape-последовательности %uXXXX не поддерживаются.

Примеры

Пример 1. Этот пример возвращает "%26":

escape("&") // возвращает "%26"

Пример 2. Следующий оператор возвращает строку кодированных символов для пробелов, запятых и апострофов.

// возвращает "The_rain.%20In%20Spain%2C%20Ma%92am"
escape("The_rain. In Spain, Ma'am")

См. также

unescape

eval


Вычисляет строку кода JavaScript без ссылки на определённый объект.

Функция ядра

Реализована в

JavaScript 1.0

Версия ECMA

ECMA-262

Синтаксис

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

Infinity


Числовое значение, представляющее бесконечность.

Свойство ядра

Реализовано в

JavaScript 1.3 (В предыдущих версиях Infinity было определено только как свойство объекта Number).

Версия ECMA

ECMA-262

Синтаксис

Infinity

Описание

Infinity это свойство верхнего уровня, не ассоциированное с каким-либо объектом.

Начальным значением Infinity является Number.POSITIVE_INFINITY. Значение Infinity (положительная бесконечность) больше любого другого числа, включая себя самого. Это значение математически ведёт себя как бесконечность; например, что-либо, умноженное на Infinity, даёт Infinity, что-нибудь, делённое на Infinity даёт 0.

См. также

Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY

isFinite


Вычисляет аргумент с целью определить, является ли он конечным числом.

Функция ядра

Реализована в

JavaScript 1.3

Версия ECMA

ECMA-262

Синтаксис

isFinite(number)

Параметр

number

Вычисляемое число.

Описание

isFinite это функция верхнего уровня, не ассоциированная с каким-либо объектом.

Можно использовать этот метод для того чтобы определить, является ли данное число конечным. Метод isFinite проверяет число-аргумент. Если аргумент равен NaN, положительной или отрицательной бесконечности, метод возвращает false, иначе возвращает true.

Пример

Можно проверить ввод клиента, чтобы определить, введено ли конечное число.

if(isFinite(ClientInput) == true)
{
   /* некоторые действия */
}

См. также

Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY

isNaN


Вычисляет аргумент с целью определить, является ли он не-числом.

Функция ядра

Реализована в

JavaScript 1.0: только Unix.

JavaScript 1.1, NES 2.0: все платформы.

Версия ECMA

ECMA-262

Синтаксис

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

NaN


Значение, представляющее Not-A-Number/Не-Число.

Свойство ядра

Реализовано в

JavaScript 1.3 (В предыдущих версиях, NaN было определено только как свойство объекта Number).

Версия ECMA

ECMA-262

Синтаксис

NaN

Описание

NaN это свойство верхнего уровня, не ассоциированное с каким-либо объектом.

Начальным значением NaN является NaN.

NaN всегда не равно любому другому числу, включая само NaN; Вы не можете проверить на значение not-a-number путём сравнения с Number.NaN. Вместо этого используйте функцию isNaN.

Некоторые методы JavaScript (такие как конструктор Number, parseFloat и parseInt) возвращают NaN, если значение, специфицированное в параметре, не является числом.

Вы можете использовать свойство NaN для указания на ошибочное условие функции, которая должна возвращать верное число.

См. также

isNaN, Number.NaN

Number


Конвертирует специфицированный объект в число.

Функция ядра

Реализована в

JavaScript 1.2, NES 3.0

Версия ECMA

ECMA-262

Синтаксис

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


Разбирает строковой аргумент и возвращает число с плавающей точкой.

Функция ядра

Реализована в

JavaScript 1.0: если первый символ строки, специфицированной в parseFloat(string), не может быть конвертирован в число, возвращается NaN на Solaris и Irix и 0 - на всех других платформах.

JavaScript 1.1, NES 2.0: возвращается NaN на всех платформах, если первый символ строки, специфицированной в parseFloat(string), не может быть конвертирован в число.

Версия ECMA

ECMA-262

Синтаксис

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

parseInt


Разбирает строковой аргумент и возвращает целое число со специфицированным radix или базой.

Функция ядра

Реализована в

JavaScript 1.0: если первый символ строки, специфицированной в parseInt(string), не может быть конвертирован в число, возвращается NaN на Solaris и Irix и 0 - на всех других платформах.

JavaScript 1.1, LiveWire 2.0: возвращается NaN на всех платформах, если первый символ строки, специфицированной в parseInt(string), не может быть конвертирован в число.

Версия ECMA

ECMA-262

Синтаксис

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 принимает следующее:

Если первый символ не может быть конвертирован в число, parseInt возвращает NaN.

Для арифметических целей значение NaN является не-числом при любом radix. Вы можете высколько правил, одно, имеющее больший вес, будет иметь приоритет.

По умолчанию правила авторской таблицы стилей имеют больший вес, чем правила  таблицы стилей пользователя. Преимущество зарезервировано, однако, для правил "!important". Все правила пользователя и автора имеют больший вес, чем правила таблицы стилей по умолчанию в ПА.

Импортируемы таблицы стилей также каскадируются, и их вес зависит от порядка импортирования. Правила, специфицированные в имеющейся таблице стилей, переопределяют правила, импортируемые из других таблиц. Импортированные таблицы стилей сами могут импортировать и переопределять другие таблицы стилей рекурсивно, и тогда применяются те же правила приоритета.


6.4.1 Порядок каскадирования

Чтобы найти значение для комбинации элемент/свойство, ПА обязаны применять следующий порядок сортировки:

  1. Найти все объявления, применяемые в запросе к элементу и свойству, для целевого типа носителя. Объявления применяются, если ассоциированный селектор подбирает элемент в запросе.
  2. Сначала объявления сортируются по весу и источнику: для нормальных объявлений - авторские таблицы стилей переопределяют пользовательские, которые, в свою очередь, переопределяют таблицу стилей по умолчанию. Для объявлений "!important" - пользовательские таблицы стилей переопределяют авторские таблицы, которые, в свою очередь, переопределяют таблицу стилей по умолчанию. Объявления "!important" переопределяют нормальные объявления. Импортированная таблица стилей имеет тот же источник, что и таблица стилей, импортировавшая её.
  3. Вторая сортировка производится по специфике селектора: более специфические селекторы переопределяют более общие. Псевдоэлементы и псевдоклассы обсчитываются как нормальные элементы и классы соответственно.
  4. Наконец, идёт сортировка по специфицированному порядку: если два правила имеют одинаковые вес, источник и специфику, выбирается специфицированное позже. Правила в импортируемых таблицах стилей рассматриваются перед любыми правилами имеющейся таблицы стилей.

Независимо от установок "!important" индивидуальных объявлений, эта стратегия даёт авторским таблицам стилей больший вес, чем таблицам читателя. Это тем более важно, поскольку ПА предоставляют пользователю возможность отключить влияние определённых таблиц стилей, например, в выпадающих меню.


6.4.2  Правила  !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 }

6.4.3 Вычисление специфики селектора

Специфика селектора высчитывается так:

Конкатенация трёх чисел 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.


6.4.4 Старшинство не-CSS подсказок

ПА могут предпочесть подсказки (hints) из других источников, а не из таблиц стилей, например, элемент FONT или атрибут "align" в HTML. Если это так, не-CSS подсказки обязаны быть переведены в соответствующие правила CSS со спецификой=0. Принимается, что правила находятся в начале авторской таблицы стилей и могут быть переопределены последующими правилами таблиц стилей.

Примечание. В фазе переноса эта политика облегчит сосуществование стилистических атрибутов с таблицами стилей.

Примечание. В CSS1 не-CSS подсказки получали специфику=1, а не 0. Это изменение сделано из-за введения универсального селектора, имеющего специфику 0.

Hosted by uCoz
8528 107189960