- Операторы
- Управляющие инструкции
- JS Объекты
- Array
- Boolean
- Date
- Error
- Function
- Global
- JSON
- Math
- Number
- Object
- RegExp
- String
- Symbol
- Итераторы и генераторы
- Map и WeakMap
- Set и WeakSet
- Локализация
- браузер BOM
- HTML DOM
- События
- HTML Объекты
- Промисы, async/await
- Сетевые запросы
- Бинарные данные и файлы
- Разное
Глобальный объект
Глобальный объект
(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:
Пример: проверка результата typeofvar 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 предполагает следующее:
- Если входная строка начинается с "0х", то
radix = 16
- Если входная строка начинается с "0", то
radix = 8
. Этот пункт зависит от реализации и в некоторых браузерах (Google Chrome) отсутствует. - В любом другом случае
radix=10
Если преобразовать в число не удается, 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") );