- Операторы
- Управляющие инструкции
- JS Объекты
- Array
- Boolean
- Date
- Error
- Function
- Global
- JSON
- Math
- Number
- Object
- RegExp
- String
- Unicode
- 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:
Пример: проверка результата 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 предполагает следующее:
- Если входная строка начинается с "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") );