Глобальный объект в JavaScript
Глобальным
называется объект, который является общим для всего скрипта. Все переменные и функции, созданные в общем потоке программы (т.е. не заданы локально для функций), называются глобальными
. Они являются свойствами и методами глобального объекта. Общий поток программы называется глобальной областью видимости
.
Объект window
Все интернет-браузеры имеют объект window
, который представляет набор свойств для работы с окном браузера. Например, функции alert()
, confirm()
и prompt()
являются методами объекта window
для работы с окном. В то же время window
является глобальным объектом в JavaScript. В скрипте можно писать так:
window.str = 'Строка'; window.alert(this.str); /* this работает, т.к. действие внутри window */
В JavaScript может быть всего один глобальный объект, поэтому его можно не указывать, но тогда var
обязателен.
var str = 'Строка'; alert(str);
Все свойства и методы глобального объекта доступны в любом месте программы.
function show() { alert('Сработало'); } show(); /* Сработало */
Если необходимо обратиться именно к свойству объекта window
, это лучше указать явно. Например, такой код ничего не выдаст:
function show() { alert('Сработало'); /* выполнится локальный alert() */ function alert() {} } show();
А так будет работать:
function show() { window.alert('Сработало'); /* выполнится alert() объекта window */ function alert() {} } show();
Глобальных свойств и методов очень много. Вот так можно получить весь список свойств window
как глобального объекта и как объекта окна браузера:
var props = ''; for (var prop in this) { props += prop + '\n'; } alert(props);
Среди всех свойств также указаны prop и props, потому что JavaScript инициализирует все функции и переменные перед выполнением скрипта.
Глобальные свойства
Infinity
Свойство Infinity
имеет числовой тип и равно положительной бесконечности. Этому свойству нельзя присвоить другое значение. Однако, имя Infinity
можно использовать для задания локальных переменных, так как оно не определено как ключевое слово JavaScript. Для бесконечности выполняются условия:
- Бесконечность больше любого числа.
- Произведение любого числа на бесконечность дает бесконечность.
- Деление на бесконечность дает 0.
NaN
Свойство NaN
имеет числовой тип со значением NaN
. Этому свойству нельзя присвоить другое значение. Однако, имя NaN
можно использовать для задания локальных переменных, так как оно не определено как ключевое слово JavaScript.
undefined
Свойство undefined
представляет примитивное значение undefined
. Этому свойству нельзя присвоить другое значение. Однако, имя undefined
можно использовать для задания локальных переменных, так как оно не определено как ключевое слово JavaScript.
Глобальные методы
eval()
Метод eval()
выполняет код JavaScript, представленный в виде строки. Аргументом передается строка, которая может содержать простое выражение или набор операторов. В передаваемой строке можно использовать переменные и свойства существующих объектов.
var str = 'alert(num * 2 - 5)'; var num = 10; eval(str);
Метод eval()
возвращает последнее вычисленное выражение.
var num = eval('1 * 2; 2 * 2'); alert(num);
Если аргументом передается не строка, тогда eval()
возвращает аргумент без изменений.
isFinite()
Метод isFinite()
преобразует переданное ему значение к числовому
типу и проверяет, является ли оно конечным числом, то есть не NaN
или ±Infinity
. Метод возвращает значения true
или false
.
alert(isFinite(undefined)); // false alert(isFinite(NaN)); // false alert(isFinite('str')); // false alert(isFinite({a: 1})); // false alert(isFinite(Infinity)); // false alert(isFinite('1')); // true alert(isFinite(null)); // true alert(isFinite(false)); // true
Данный метод нельзя использовать для проверки принадлежности к числовому
типу. Однако, с его помощью можно определить, является ли значение, введённое пользователем, числом или нет. Это следует из того, что вся вводимая пользователем информация представляется в виде строк (если ввести null
, то это будет именно строка null
). Таким образом, заведомо известно, что методу будет передана некая строка или значение undefined
, если ничего не получено от пользователя (если получена пустая строка, то она расценивается как число 0
). Следовательно, метод isFinite()
вернёт значение true
, только если введённая строка может быть преобразована к конечному числу (±Infinity
исключаются).
<script> var num; num = prompt('Введите число'); if (num !== null) { /* если prompt() не отменено */ if (isFinite(num)) { alert('Вы ввели конечное число.'); } else { alert('Вы ввели не число.'); } } </script>
Если существует вероятность, что методу isFinite()
будут переданы значения null
, true
или false
, тогда их необходимо исключать отдельной проверкой.
isNaN()
Метод isNaN()
преобразует переданный ему параметр к числовому
типу и возвращает true
, если получилось NaN
.
alert(isNaN(undefined)); // true alert(isNaN(NaN)); // true alert(isNaN('str')); // true alert(isNaN({a: 1})); // true alert(isNaN(Infinity)); // false alert(isNaN('1')); // false alert(isNaN(null)); // false alert(isNaN(false)); // false
Чтобы получить точный результат (без преобразования к числовому типу), можно воспользоваться оператором сравнения:
function ISNAN(a) { return (a != a); /* только NaN не равен себе */ } alert(ISNAN(NaN)); // true alert(ISNAN(undefined)); // false alert(ISNAN('str')); // false alert(ISNAN(Infinity)); // false
Так получается, потому что только NaN
не равен себе.
parseFloat()
Метод parseFloat()
проверяет переданную ему строку и возвращает вещественное число. Проверка строки идет посимвольно. Если символ не является знаком (+
или -
), цифрой (0-9
), точкой или экспонентой, то функция отбрасывает все оставшиеся символы. Начальные и конечные пробелы отбрасываются перед проверкой.
alert(parseFloat('+200')); // 200 alert(parseFloat('2.e+2')); // 200 alert(parseFloat('2E+2')); // 200 alert(parseFloat('200px')); // 200
Если проверка прерывается сразу на первом символе, то parseFloat()
возвращает NaN
. parseFloat()
может вернуть значение бесконечности.
alert(parseFloat('"200"')); // NaN alert(parseFloat('-Infinity')); // -Infinity
parseInt()
Метод parseInt()
возвращает целое десятичное число из переданной ему строки. Первым аргументом указывается строка, в которой идет поиск числа. Если аргумент не является строкой, то он преобразуется в строковый тип. Проверка строки идет посимвольно после удаления начальных и конечных пробелов. Если найден недопустимый символ, то остальные символы отбрасываются. Если проверка останавливается на первом символе, то возвращается NaN
. Допустимые символы определяются вторым аргументом функции.
Вторым аргументом указывается система счисления, в которой записан первый аргумент. Допускаются системы счисления с основанием от 2 до 36. Метод parseInt()
конвертирует число из указанной системы счисления в десятичную и возвращает.
alert(parseInt('2e+3', 16)); /* 46, прервано на '+' */ alert(parseInt('2e+3', 10)); /* 2, прервано на 'e' */ alert(parseInt('2e+3', 2)); /* NaN, прервано на '2' */
Если второй аргумент опущен или равен 0
, система счисления устанавливается браузером:
- Если строка начинается с
0x
или0X
, то основание системы 16. - Если строка начинается с
0
, то основание системы 10. Но некоторые браузеры используют основание 8. - В остальных случаях используется основание 10.
Чтобы parseInt()
работал во всех браузерах одинаково, всегда нужно указывать второй аргумент.
encodeURI()
Метод encodeURI()
кодирует полный универсальный идентификатор ресурса (URI). Он производит замену некоторых символов их кодом в кодировке UTF-8. Не кодируются:
Зарезервированные символы универсального идентификатора | ; , / ? : @ & = + $ |
Неэкранируемые символы | все буквы латинского алфавита, цифры, - _ . ! ~ * ' ( ) |
Решётка | # |
alert(encodeURI('/search.html?query=<>324!#$@%":L')); /* /search.html?query=%3C%3E324!#$@%25%22:L < преобразовано в %3C > преобразовано в %3E % преобразовано в %25 " преобразовано в %22 */
encodeURIComponent()
Метод encodeURIComponent()
кодирует часть универсального идентификатора ресурса (URI). Он производит замену некоторых символов их кодом в кодировке UTF-8. Не кодируются: все буквы латинского алфавита, цифры, - _ . ! ~ * ' ( )
.
Чтобы избежать неправильных запросов к серверу, нужно применять метод encodeURIComponent()
на любые введенные пользователем параметры, которые будут переданы как часть URI. Например, если пользователь для переменной voice введет строку 1 &again=false
, то на сервер отправится строка voice=1%20&again=false
. Получается два ключевых значения voice и again вместо одного. Использование encodeURIComponent()
приведёт к отправке строки voice=1%20%26again%3Dfalse
с правильным ключевым значением.
decodeURI()
Метод decodeURI()
раскодирует URI, созданный при помощи метода encodeURI()
или аналогичного. Заменяет UTF-8 коды символами.
decodeURIComponent()
Метод decodeURIComponent()
раскодирует URI, созданный при помощи метода encodeURIComponent()
или аналогичного. Заменяет UTF-8 коды символами.