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

28.01.2020

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

Свойства

  1. Infinity
  2. NaN
  3. undefined

Функции:

  1. decodeURI()
  2. decodeURIComponent()
  3. encodeURI()
  4. encodeURIComponent()
  5. eval()
  6. isFinite()
  7. isNaN()
  8. parseFloat()
  9. parseInt()

Объекты:

  1. Array
  2. Boolean
  3. Date
  4. Function
  5. JSON
  6. Math
  7. Number
  8. Object
  9. RegExp
  10. String
  11. Symbol

Объекты-ошибки:

  1. Error
  2. EvalError
  3. RangeError
  4. ReferenceError
  5. SyntaxError
  6. TypeError
  7. URIError А теперь рассмотрим описание всех частей глобального объекта.

Infinity

Значение Infinity представляет бесконечность. Бывает положительная и отрицательная бесконечность - -Infinity. Чтобы получить бесконечность нужно просто получить большие числами, которые невозможно представить в типе данных Number. Любые математические операции с Infinity будут выдавать Infinity либо NaN. Существуют эквивалентые значения Number.POSITIVE_INFINITY и Number.NEGATIVE_INFINITY.

NaN

Глобальное значение NaN расшифровывается как Not a Number. Его можно получить если ноль поделить на ноль, в результате функции parseInt(), операциях c Infinity и т.д.

parseInt()		// NaN
parseInt(a)		// NaN
0 / 0			// NaN

Если сравнить две разных переменных со значением NaN, то вы увидите, что они не равны. Существует метод isNaN() если вы хотите проверить является ли значение NaN.

NaN === NaN // fasle
NaN === 0/0 // false
isNaN(0/0)  // true

undefined

Свойство undefined хранит значение undefined. Как мы уже знаем это означает отсутсвие какого-либо значения. Если функция не возвращает значение, то она вернет undefined. undefined можно сравнивать с другими undefined и они будут равны.

undefined === undefined // true 

Если переменная объявлена, но не имеет значения, то она опять же будет undefined. Если переменная не факт что была объявлена то можно использовать следующий трюк.

typeof neverDefinedVariable === `undefined` // true

В этом случае не будет ошибки в отличие от

neverDefinedVariable != null // ReferenceError: neverDefinedVariable is not defined

decodeURI() & encodeURI()

Пара функций которые помогут работать с кодированными URL, они нужны, чтобы в URL не попадали специальные символы которые зарезервированы или не поддерживаются. Функция encodeURI кодирует все символы, кроме A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ‘ ( ) # Функция decodeURI соответсвенно декодирует. Посмотрим как это выглядит на примере.

let uri = https://yandex.ru/search/?text=Как купить слона”;

const encoded = encodeURI(uri);
const decoded = decodeURI(uri);
// encoded: https://yandex.ru/search/?text=%D0%9A%D0%B0%D0%BA%20%D0%BA%D1%83%D0%BF%D0%B8%D1%82%D1%8C%20%D1%81%D0%BB%D0%BE%D0%BD%D0%B0
// decoded: https://yandex.ru/search/?text=Как купить слона

Обе функции могут выкидывать исключение URIError. Например, в следующих случаях:

encodeURI(`\uD800’); // -> URIError
decodeURI(‘%E0%A4%A’); // -> URIError

decodeURIComponent() & encodeURIComponent()

Точно такая же пара функций как encodeURI и decodeURI. Только они работают не с целым URI, а лишь с его частью. Могут выкидывать точно такие же исключения.

let uri = "https://yandex.ru/search/?text=Как купить слона";
const encoded = encodeURIComponent(uri);
const decoded = decodeURIComponent(uri);
// encoded https%3A%2F%2Fyandex.ru%2Fsearch%2F%3Ftext%3D%D0%9A%D0%B0%D0%BA%20%D0%BA%D1%83%D0%BF%D0%B8%D1%82%D1%8C%20%D1%81%D0%BB%D0%BE%D0%BD%D0%B0
// decoded https://yandex.ru/search/?text=Как купить слона

eval()

eval позволяет выполнять код, которые передается в нее как строка. Функция возвращает результат который будет получен в коде. Если передать не валидный код, то функция выкинет исключение SyntaxError. Пример:

let sum = eval('1 + 2'); // -> 3
eval(' {([...') // -> SyntaxError

Функция eval очень опасная, так как она может выполнять произвольный переданный код с правами того кто ее вызывает. Так же следует учитывать eval выполняется медленно в отличие от обычного кода.

isFinite()

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

isFinite(1) 			// true
isFinite(0/0) 		// false
isFinite('ABCDEF') 	// false
isFinite({})			// false

// неприятные исключения
isFinite(null)		// true
isFinite('0')			// true

В примере приведены неприятные исключения, чтобы избежать их следует пользоваться функцией Number.isFinite.

isNaN()

Как мы уже знаем NaN === NaN и NaN == NaN в результате дают ложь. Поэтому существует функция isNaN. Как и функция isFinite, isNaN имеет ряд послаблений в плане проверок, поэтому если нужна строгость то лучше использовать Number.isNaN.

isNaN(NaN);       // true
isNaN(undefined); // true
isNaN({});        // true

isNaN(true);      // false
isNaN(null);      // false
isNaN(37);        // false

// strings
isNaN('27');      // false: "27" автоматические конвертируется к числу.
isNaN('27.77');   // false
isNaN("37,5");    // true: невалидная строка
isNaN('123ABC');  // true
isNaN('');        // false: пустая строка конвертируется в 0
isNaN(' ');       // false: строка с пробелами конвертируется в 0

// dates
isNaN(new Date());                // false
isNaN(new Date().toString());     // true

parseFloat()

Функция принимает аргумент преобразует его в строку и пытается вернуть число с плавающей точкой. Пример:

parseFloat('3.14')	-> 3.14
parseFloat('3,14')	-> 3

parseInt()

Функция принимает два аргумент, значение которое нужно преобразовать в целое число и необязательный параметр основание системы счисления.

parseInt('123');			-> 123
parseInt('ABCDEF', 16);	-> 11259375
parseInt(100, 3); 		-> 9
parseInt("0101", 2)		-> 5
parseInt(100, 1); 		-> NaN

Объекты

  1. Array - основной объект для массивов
  2. Boolean - объект-тип для логического типа
  3. Date - объект для представления даты и времени
  4. Function - объект для представления функций
  5. JSON - объект для преобразования объектов в JSON или получения объектов из JSON.
  6. Math - объект-хранилище для математических функций.
  7. Number - объект-тип для числовых данных
  8. Object - базовый объект
  9. RegExp - объект-тип для представления регулярных выражений
  10. String - объект-тип для представления строковых данных
  11. Symbol - объект-тип для специального типа Символ.

Объекты-ошибки

  1. Error - ошибка исполнения, является базовой для всех ошибок. Все пользовательские ошибки следует наследовать от нее. Обязательно содержит два поля name и description. Могут встречаться дополнительные поля, которые зависят от производителя движка.
  2. EvalError - ошибка, которая раньше возникала при вызове функции eval. В настоящее время не может быть получена.
  3. RangeError - если значение не входит в набор разрешенных значений, то возникает соответствующая ошибка. Например,
parseFloat('15e-10').toFixed(-1) // -> RangeError
  1. ReferenceError - если обратить к переменной которая не была объявлена, то получите именно это исключение
  2. SyntaxError - возникает при попытке выполнить синтаксически неверный код.
  3. TypeError - встречается, когда операция не может выполнится из-за неправильных типов данных аргументов операции. Например
const x = 'abc';
x = 'bc'; // -> TypeError 
  1. URIError - может возникать при использовании функций encodeURI, decodeURI, encodeURIComponent, decodeURIComponent.
#jsbook#javascript

Еженедельная рассылка новостей

События в JavaScript

Map, Filter, Reduce в JavaScript