Глобальный объект

Глобальный объект (Global) создается исполняющей системой JavaScript перед началом исполнения сценария. Это единственный объект, который не имеет имени, и потому доступ к его свойствам и методам осуществляется без имени объекта. По этой причине их иногда называют свойствами и методами верхнего уровня.

Свойства
InfinityБесконечность
NaNНе-Числовое значение
undefinedОбозначает неопределенное значение
Методы
escapeВозвращает 16-ричное значение - кодировку аргумента из набора символов ISO Latin-1; используется для создания строк для добавления в URL.
decodeURIРаскодирует URI, закодированный при помощи encodeURI
decodeURIComponentРаскодирует URI, закодированный при помощи encodeURIComponent
encodeURIКодирует URI, заменяя каждое вхождение определенных символов на escape-последовательности, представляющие символ в кодировке UTF-8.
encodeURIComponentКодирует компоненту URI, заменяя определенные символы на соответствующие UTF-8 escape-последовательности
evalВыполняет строку javascript-кода без привязки к конкретному объекту.
isFiniteвозвращает, является ли аргумент конечным числом
isNaNПроверяет, является ли аргумент NaN
parseFloatпреобразует строковой аргумент в число с плавающей точкой
parseIntпреобразует строковой аргумент в целое число нужной системы счисления
unescapeВозвращает ASCII-строку для специфицированного 16-ричного кодового значения.

Infinity

Бесконечность

Изначальное значение Infinity равно Number.POSITIVE_INFINITY. Оно больше, чем любое число, включая само себя.

Математически, это значение ведет себя как бесконечность. Например, что угодно, помноженное на Infinity дает Infinity, и что угодно, деленное на Infinity дает 0.

NaN

Не-Числовое значение

Изначальное значение NaN - такое же, как Number.NaN.

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

Значение NaN не равно никакому другому числу, включая само NaN.

Чтобы проверить переменную на NaN, используйте специальную функцию isNaN.

alert (
(a = Math.sqrt(-1)) + '\n' + // NaN
(a = 1/0) );                 // Infinity

undefined

Обозначает неопределенное значение

Эта глобальная переменная содержит элементарное неопределенное значение - то, которое имеет переменная, значение которой не указано.

Например, функция без директивы return возвращает undefined.

function a() {
   alert('test')
}

result = a() // result является undefined
alert(result === undefined) // true

Обращение к несуществующему свойству объекта также даст undefined.

result = window.notexists  
alert(result === undefined) // true

Как видно из примеров, определить, является ли значение undefined, можно строгим (тройным) знаком равенства.

Например, можно проверить, существует ли глобальная переменная:

if (window.somevar !== undefined) { .... }

При сравнении идет обращение к свойству через заведомо существующий объект window. Поэтому интерпретатор не выдаст ошибку даже если свойства somevar не существует.

Также заметим, что нужен именно строгий оператор сравнения, т.к x==undefined возвратит true также если x является (null), а это уже другое значение.

Строгое сравнение является лучшей альтернативой использованию typeof:

Пример: проверка результата typeof
var x
// 
if (typeof x == "undefined") {
   ...
}

escape

Кодирует строки таким образом, чтобы они могли читаться на всех компьютерах. Не рекомендуется.

Синтаксис

escape(string) 

Параметры

string
любой объект или литерал String для кодирования.

Возвращаемое значение

Функция escape возвращает строковое значение (в формате Юникода), содержащее содержимое аргумента string. Все пробелы, знаки пунктуации, диакритические знаки и другие знаки, не являющиеся символами ASCII, кодируются в виде %xx, где xx является эквивалентом шестнадцатеричного числа, представляющего данный знак.

Знаки, значения которых превышают 255, сохраняются в формате %uxxxx.

Комментарии

Не следует использовать функцию escape для кодирования универсальных кодов ресурса (URI). Вместо этого используйте функции encodeURI и encodeURIComponent.

alert (escape("Пример\nThe_rain. In Spain, Ma'am"));

decodeURI

Раскодирует URI, закодированный при помощи encodeURI

Синтаксис

uri = decodeURI(encodedURI)

Параметры

encodedURI
URI, закодированный при помощи encodeURI

Возвращаемое значение

Заменяет каждую escape-последовательность в закодированном URI символом, который она представляет.

Не раскодирует escape-последовательности, которые не могли быть созданы encodeURI.

decodeURIComponent

Раскодирует URI, закодированный при помощи encodeURIComponent

Синтаксис

uri = decodeURIComponent(encodedURIComponent)

Параметры

encodedURIComponent

URI, закодированный при помощи encodeURIComponent

Возвращаемое значение

Заменяет каждую escape-последовательность в закодированном URI символом, который она представляет.

Не раскодирует escape-последовательности, которые не могли быть созданы encodeURIComponent.

encodeURI

Кодирует URI, заменяя каждое вхождение определенных символов на escape-последовательности, представляющие символ в кодировке UTF-8.

Синтаксис

encodeURI(URI)

Параметры

URI
строка URI

Возвращаемое значение

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

Метод encodeURI заменяет все символы, исключая следующие, соответствующими им UTF-8 escape-последовательностями.

Тип
Включает в себя

Зарезервированные
; , / ? : @ & = + $

Незаменяемые символы
латинский алфавит, десятичные цифры, - _ . ! ~ * ' ( )

Значок решетки
#

Заметим, что encodeURI не может формировать данные для GET или POST-запросов, например, для XMLHttpRequest, так как "&", "+", и "=" не кодируются - а они являются специальными символами.

Их кодирует метод encodeURIComponent.

encodeURIComponent

Кодирует компоненту URI, заменяя определенные символы на соответствующие UTF-8 escape-последовательности

Синтаксис

var encoded = encodeURIComponent(str)

Параметры

str
компонент URI

Возвращаемое значение

Метод encodeURIComponent заменяет все символы, кроме:
символов латинского алфавита, десятичных цифр и - _ . ! ~ * ' ( ).

Комментарии

Чтобы избежать некорректных запросов к серверу, метод encodeURIComponent следует вызывать на каждом введенном пользователем параметре, который будет передан как часть URI.

Например, пользователь может ввести "me&time=5" в переменной label. Без использования encodeURIComponent соответствующая компонента запроса будет иметь вид label=me&time=5.
Вместо одного значения label появилось два значения:
label=me и time=5.

Чтобы этого избежать, кодируйте данные перед передачей в URI:

label = 'me&you';
uri="http://my.com";
uri = uri + '&label=' + encodeURIComponent(label);
alert (uri);

eval

Выполняет строку javascript-кода без привязки к конкретному объекту.

Синтаксис

eval(codeStr)

Параметры

codeStr
код для выполнения, может использовать переменные и свойства существующих объектов

Примеры

a = "alert(1)"
eval(a)

Возвращаемое значение

Метод eval возвращает значение последнего вычисленного выражения.

Примеры

var str = "if (a) { 1+1 } else { 1+2 }"
var a = true
var b = eval(str)
alert("b равно : " + b) // 2

// теперь поменяем "a"

a = false
b = eval(str)
alert("b равно : " + b) // 3


Если аргумент eval - не строка, то возвращается аргумент без изменения:

r = new RegExp('a')
r == eval(r) // true

Можно обойти это прямым вызовом toString:

function forceEval(obj) {
    return eval(obj.toString())
}


Не используйте eval

Выполнение кода в eval может быть небезопасно. При таком выполнении затруднена отладка. В современном javascript, как правило, можно воспользоваться другими языковыми средствами вместо eval.


eval для JSON

Как правило, eval используют для разбора формата JSON.

var = eval('('+json+')')

Такой способ небезопасен, но наиболее быстр.



В старых реализациях javascript у eval мог быть второй параметр - объект obj, в контексте которого выполнялся код.

В современном javascript для этого используется with:

eval(code, obj) // старый вариант

with(obj) {
    eval(code) // современный вариант
}

isFinite

Возвращает, является ли аргумент конечным числом

Синтаксис

isFinite(number)

Параметры

number
число/NaN/INFINITY

Возвращаемое значение

Возвращает false, если аргумент является NaN, положительной или отрицательной бесконечностью. Иначе возвращает true.

isNaN

Проверяет, является ли аргумент NaN

Синтаксис

isNaN(testValue)

Параметры

testValue
значение на проверку

Возвращаемое значение

Метод isNaN пытается преобразовать переданный параметр в число. Если параметр не может быть преобразован, возвращает true, иначе возвращает false.

Комментарии

Эта функция полезна, так как значение NaN не может быть проверено операторами эквивалентности.

Значение x == NaN и x === NaN всегда false для любого x, даже если x=NaN.

1 == NaN    // false
NaN == NaN  // false
isNaN(NaN)  // true
isNaN("12") // false

parseFloat

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

Синтаксис

parseFloat(strVal)

Параметры

strVal
строка, представляющая числовое значение

Описание

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

Допустимы начальные и конечные пробелы.

Если аргумент не может быть преобразован в число - возвращает NaN

Примеры

Пример: все вызовы вернут 3.14

parseFloat("3.14");
parseFloat("314e-2");
parseFloat("0.0314E+2");

var x = "3.14";
parseFloat(x);

parseFloat("3.14more non-digit characters");

Пример: возврат NaN

parseFloat("тест") // NaN

Для более строгого преобразовния строки в число используйте оператор "+". Он возвращает NaN, если строка в точности не является числом.

str = "3.14"
+str == parseFloat(str)

+"3.14abc" // NaN, но
parseFloat("3.14abc") // = 3.14

parseInt

Преобразует строковой аргумент в целое число нужной системы счисления

Синтаксис

var intValue = parseInt(string[, radix])

Параметры

string
строковое представление числа
radix
основание системы счисления

Возвращаемое значение

Функция parseInt преобразует первый аргумент в число по указанному основанию, а если это невозможно - возвращает NaN.

Например, radix=10 даст десятичное число, 16 - шестнадцатиричное и т.п. Для radix>10 цифры после девяти представлены буквами латинского алфавита.

Описание, комментарии, примеры

Если в процессе преобразования parseInt обнаруживает цифру, которая не является цифрой в системе счисления с основанием radix, например G вв 16-ричной системе или А в десятичной, то процесс преобразования тут же завершается и возвращается значение, полученное из строки на данный момент.

parseInt округляет дробные числа, т.к останавливается на десятичной точке.

Если radix не указан или равен 0, то javascript предполагает следующее:

Если преобразовать в число не удается, parseInt возвращает NaN

Чтобы представить число в виде строки нужной системы счисления, используйте intValue.toString(основание).



Пример: все вызовы вернут 15

parseInt(" 0xF", 16)
parseInt(" F", 16)
parseInt("17", 8)
parseInt(021, 8)
parseInt("015", 10)
parseInt(15.99, 10)
parseInt("FXX123", 16)
parseInt("1111", 2)
parseInt("15*3", 10)
parseInt("15e2", 10)
parseInt("15px", 10)
parseInt("12", 13)


Пример: все вызовы вернут NaN

parseInt("Hello", 8); // вообще не число
parseInt("546", 2);   // цифры не входят в 2-чную систему


Пример: все вызовы вернут -15

parseInt("-F", 16)
parseInt("-0F", 16)
parseInt("-0XF", 16)
parseInt(-10, 16)
parseInt(-15.1, 10
parseInt(" -17", 8)
parseInt(" -15", 10)
parseInt("-1111", 2)
parseInt("-15e1", 10)
parseInt("-12", 13)


Большинство реализаций интерпретируют строки, начинающиеся с 0 как восьмиричные. Поэтому следующие вызовы вернут восьмиричный результат:

parseInt("0e0"); // 0
parseInt("08"); // 0, т.к. '8' - не цифра в 8-ричной системе
Не все браузеры так поступают. Некоторые (напр. Google Chrome) - интерпретируют числа в десятичной системе, даже если они начинаются с 0. Стандарт это допускает.


При обработке данных, веденных пользователем, указывайте основание в вызове. Это даст более предсказуемые результаты.

parseInt("08", 10) // всегда 8


Чтобы преобразовать строку, в точности являющуюся числом, используйте оператор "+":

var str = "123.6"
+str // 123.6 - не округляет


При любых ошибках преобразования оператор "+" возвращает NaN.

var str = "123bc"
+str // NaN
parseInt(str,10) // 123

unescape

Декодирует объекты String, закодированные с помощью функции escape. Не рекомендуется.

Синтаксис

unescape(string) 

Параметры

string
объект String или литерал для декодирования.

Возвращаемое значение

Функция unescape возвращает строковое значение с содержимым string. Все знаки, закодированные в виде шестнадцатеричного значения %xx, заменяются эквивалентами из кодировки ASCII.

Знаки, закодированные в формате %uxxxx (знаки Юникода), заменяются знаками Юникода в шестнадцатеричной кодировке xxxx.

Комментарии

Не следует использовать функцию unescape для декодирования универсальных кодов ресурса (URI). Вместо этого используйте функции decodeURI и decodeURIComponent.

alert( unescape("%u041F%u0440%u0438%u043C%u0435%u0440%0AThe_rain.%20In%20Spain%2C%20Ma%27am") );