JS об'єкт Global


Глобальный об'єкт

Глобальний об'єкт надає змінні та функції, готові до використання в будь-якій точці програми. Зазвичай, це елементи, вбудовані безпосередньо в мову чи середовище її роботи. В браузерах він носить ім'я window, у Node.js відомий як global. Але в інших середовищах його назва може відрізнятися.

Не так давно мову JavaScript поповнило нове ім'я для глобального об'єкта — globalThis. Ця назва призначена бути універсальною і працювати в будь-якому середовищі. Основні браузери вже її підтримують.

Надалі ми будемо використовувати window, маючи на увазі роботу в браузері. Проте якщо ваш скрипт можливо запускатиме в інших середовищах, віддайте перевагу globalThis.

Отже, щоб отримати доступ до атрибутів глобального об'єкта:

alert("Привіт");
// Це те ж саме, що:
window.alert("Привіт");

У контексті браузера, якщо ви оголошуєте глобальні функції чи змінні через var (не через let чи const!), вони стають частиною глобального об'єкта:

var gVar = 5;
alert(window.gVar); // виведе 5

Аналогічна ситуація із функціями, створеними за допомогою Function Declaration.

Якщо ж ви використовуєте let:

let gLet = 5;
alert(window.gLet); // виведе undefined

І коли вам потрібно дійсно зробити деяку властивість глобальною, просто додайте її до глобального об'єкта:

// Записуємо інформацію про користувача глобально
window.currentUser = {
  name: "John"
};
alert(currentUser.name); // виведе John

Однак за загальними рекомендаціями краще уникати глобальних змінних. Чистий код, де кожна функція працює зі своїми вхідними параметрами і видає очікуваний результат, завжди буде кращим вибором.

автор: Bond

Використання для поліфілів

Глобальний об'єкт дозволяє перевірити підтримку сучасних можливостей мови. Давайте, наприклад, перевіримо наявність вбудованого об'єкта Promise (така підтримка відсутня в дуже старих браузерах):

if (!window.Promise) {
  alert("Ваш браузер застарілий!");
}

Якщо такої підтримки немає (можливо, використовується стара версія браузера), ми можемо створити поліфіл: додати функції, які не підтримуються поточним середовищем, але є в сучасному стандарті.

if (!window.Promise) {
  window.Promise = ... // наша реалізація сучасних можливостей мови
}
автор: Bond

Порада

Створення багатьох глобальних змінних може призвести до конфліктів у назвах, а також ускладнити відлагодження коду. Якщо можливо, намагайтеся обмежити їх кількість або використовуйте простори імен для організації глобальних значень.

автор: Bond
Нотатка

У JavaScript "глобальний" зазвичай означає "не в межах функції". Якщо змінна оголошена поза будь-якою функцією, вона є глобальною, і її можна використовувати в усьому коді.

автор: Bond
Нотатка

Замість того, щоб користуватися window в браузері або global в Node.js, можна використовувати globalThis. Це універсальний спосіб звертання до глобального об'єкта в різних середовищах виконання.

автор: Bond

Синтаксис

var x = window.variable; // для браузера
var x = global.require('path'); // Node.js
var x = globalThis.variable; // Node.js (> 6.0.0)

методи

Метод Опис
encodeURIComponent Закодовує компонент URI, замінюючи спеціальні символи на їхні коди відсотка.
encodeURI Перетворює текст в кодований вигляд, придатний для використання в Уніфікованих Ідентифікаторах Ресурсу (URI).
decodeURIComponent Перетворює закодовані компоненти URI назад у їхній первісний текстовий формат.
decodeURI Перетворює закодований URI назад в звичайний рядок.
eval Виконує рядок як код JavaScript.
escape Перетворює спеціальні символи в рядку на їхні закодовані у вигляді URI еквіваленти.
isFinite Визначає, чи є даний числовий аргумент скінченним числом.
isNaN Перевіряє, чи є значення "не числом" (NaN).
Number Вбудований об'єкт, що представляє числовий конструктор і допоміжні методи для роботи з числами.
parseFloat Перетворює рядок у десяткове число.
parseInt Перетворює рядок у ціле число.
String Створює або перетворює значення в рядок.
unescape Перетворює закодовані символи URI назад у їхній вихідний рядковий вигляд.
getRandomValues Генерує криптографічно стійкі випадкові значення для масивів.

властивості

Властивість Опис
Infinity Спеціальне числове значення, що представляє нескінченність або результат ділення на нуль.
NaN Позначає значення, яке не є числом.
undefined Спеціальне значення, яке вказує на відсутність визначеного значення або непризначену змінну.

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE
1 4 1 5 12
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
37 18 4 1
Підтримка: серверні переглядачі
Переглядач Node.js Deno
0.10.0 1.0

Приклади

+ запропонувати свій приклад у пісочниці

У даному прикладі ми працюємо з глобальним об'єктом JavaScript в середовищі браузера, який називається window. На початку ми створюємо глобальну змінну currentUser з ім'ям користувача "John". Після цього ми використовуємо функцію alert для відображення імені користувача. Наостанок, ми демонструємо, як безпечно звертатися до глобальної змінної, якщо в області видимості існує локальна змінна з таким же ім'ям, використовуючи window.currentUser.name.

// зробити інформацію про поточного користувача глобальною, для надання доступу всім скриптам
window.currentUser = {
  name: "John"
};

alert(currentUser.name); // John

// або, якщо у нас є локальна змінна з ім'ям "currentUser",
// отримаємо її з window явно
alert(window.currentUser.name); // John
автор: Bond

У цьому прикладі ми створили глобальний об'єкт userConfig, який зберігає інформацію про користувача та його персональні налаштування. Об'єкт має дві підсекції: userInfo для особистої інформації користувача та preferences для його налаштувань.

Ми також створили дві функції:

  • setTheme - дозволяє змінювати тему відображення користувача (з темної на світлу та навпаки).
  • displayUserInfo - виводить інформацію про користувача в консоль.

Цей приклад демонструє, як можна структурувати глобальні дані та використовувати їх в різних частинах програми.

// Створюємо глобальний об'єкт для зберігання інформації про користувача та його налаштування
window.userConfig = {
  userInfo: {
    name: "Anna",
    age: 25,
    location: "Kyiv"
  },
  preferences: {
    theme: "dark",
    language: "uk"
  }
};

// Функція, що змінює тему відображення для користувача
function setTheme(theme) {
  if (theme === 'dark' || theme === 'light') {
    window.userConfig.preferences.theme = theme;
    // тут можна додати код для зміни стилів сторінки відповідно до обраної теми
    console.log(`Тема змінена на: ${theme}`);
  } else {
    console.log("Невідома тема. Будь ласка, виберіть 'dark' або 'light'.");
  }
}

// Функція для виведення інформації про користувача
function displayUserInfo() {
  console.log(`Ім'я: ${window.userConfig.userInfo.name}`);
  console.log(`Вік: ${window.userConfig.userInfo.age}`);
  console.log(`Місто: ${window.userConfig.userInfo.location}`);
}

// Використання функцій
displayUserInfo(); // Виведе інформацію про користувача
setTheme('light'); // Змінить тему на світлу
автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід