Расширенные основы бэкенда JavaScript

Опубликовано: 14 Июля, 2021

Начало работы с основами работы с JavaScript

Следующая статья является продолжением моей предыдущей статьи. В этой статье мы подробно рассмотрим некоторые из передовых концепций JavaScript, которые широко используются в отрасли.

«==» против «===»

  • «==» приводит к типу ввода, то есть заставляет переменную быть одинаковой, а затем проверяет их равенство.
  • «===» на самом деле требует, чтобы эквивалентные типы давали истинный результат. По сути, «===» более широко используется, а «==» следует использовать только тогда, когда мы действительно знаем эквивалентность типов входных данных. Ниже приведена таблица, которая четко определяет, для каких значений они оба будут отправлять ИСТИНА или ЛОЖЬ.

Примечание. Я предлагаю всегда использовать «===», если вы действительно не знаете, что делаете.

Ложные значения JavaScript

Следующие значения при преобразовании в логическое значение обрабатываются как значения FALSE:

  • 0 - число ноль всегда ложно
  • undefined - любое значение, если примитивно не определено, рассматривается как ложное.
  • null - примитивные нулевые значения всегда ложны
  • + 0, -0, NaN (не число) - положительный / отрицательный ноль или значение, которое не является числом, считается ложным.

Истинные ценности JavaScript

Следующие значения при преобразовании в логические обрабатываются как ИСТИННЫЕ значения:

  • {} - пустой объект
  • [] - пустой массив
  • Все остальное, что не является ложным, - ИСТИНА.

Прототипное наследование

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

  • Непримитивные типы (объекты) имеют несколько связанных с ними свойств / методов.
    Пример: - Array.prototype.push ()
    String.prototype.toUpperCase ()
  • Каждый объект хранит ссылку на свой прототип, а затем, возможно, его прототип также имеет свой прототип, то есть возможно объединение прототипов в цепочку.
  • Прототип / свойства / методы, наиболее точно определенные для экземпляра, имеют приоритет.

Пример:




var arr = [];
arr.test = 'test' ; // making a property called test
Array.prototype.test = 'test1' // making a prototype test on the array object

Теперь, если мы напечатаем «arr.test» на нашей консоли,
Выход :

контрольная работа

Причина в том, что test сначала жестко привязан к экземпляру массива и имеет приоритет, хотя мы определили прототип «test1» позже.

Цепочка прототипов

NULL <- Object <- Array <- Экземпляры массива
Выше представлен пример цепочки прототипов, которой следуют в случае объектов. Подобно прототипу всех экземпляров массива является объектный массив, прототипом объекта массива является Object, и поскольку в JavaScript все является объектом, и, следовательно, его прототипом является NULL.

У некоторых методов или прототипов есть метод «записываемый», для которого установлено значение false, т.е. они не могут быть перезаписаны.
Пример:




var arr = [1, 2, 3];
arr.length = 'test' ; //length is also an actual property of array and not writable

Вышеупомянутая программа не выдает ошибок, но когда мы печатаем arr.length , на выходе получается «3», что является фактическим свойством, а не тем, что мы создали.

Примечание: - Мы знаем, что примитивные типы не имеют связанных с ними методов, но у большинства примитивных типов есть объектные оболочки, которые мы можем объявить, а затем мы можем использовать эти методы и свойства. JavaScript будет упаковывать или обертывать примитивные значения, чтобы вы могли иметь доступ к методам, которые используют не примитивные типы.
В следующем списке определены различные оболочки в JavaScript:

  • Нить()
  • Логический ()
  • Число()
  • Объект()
  • Символ()

Примечание. Убедитесь, что вы видите разницу между этими типами и примитивными типами: в приведенных выше оболочках все первые символы имени оболочки пишутся с заглавной буквы.

Пример:-

Вышеупомянутые строковые ошибки, поскольку 50 - это примитивный тип, который является «числом» и не имеет методов.
Но в приведенном ниже примере

Механизм JavaScript оборачивает примитивный тип «x», принимая объект-оболочку Number () . Итак, теперь, поскольку он оборачивает 'x' в прототип Number (), который является объектом, и теперь мы можем использовать функции, которые были нам недоступны.

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

Все переменные и функции на самом деле являются параметрами и методами, определенными для глобального объекта.
Для браузера глобальным объектом является объект «окно» .
Для NodeJS глобальный объект сам называется «глобальным» .
Ниже показано изображение глобальных объектов в браузере и движке nodeJS.


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


В списке показаны все nodeJS «глобальные» функции глобального объекта , определенные , которые могут быть использованы JavaScript.

Контекст выполнения

  • Это эквивалентно «кадру стека» в C.
  • Обертка переменных и функций является локальной по отношению к созданию функции.
  • Коллекция контекстов выполнения называется стеком выполнения.

Лексическая среда

  • Он определяет, как разрешаются имена переменных, особенно с вложенными функциями.
  • Дочерние функции содержат область действия родительской функции, даже если родительская функция вернулась. (Эта часть будет рассмотрена позже в теме «закрытие»)

Пример:-




var x = 50;
function test() {
var x = 42;
function printvaluex(){
console.log(x);
}
}

Дочерняя функция находится в области проверки, даже если присутствует глобальный символ «x». Это связано с тем, что лексическая среда дочерней функции замыкается на ее родителя, а не на глобальное значение «x».

Автор статьи - Анируд Ачарья . Если вам нравится GeeksforGeeks, и вы хотели бы внести свой вклад, вы также можете написать статью с помощью provide.geeksforgeeks.org или отправить ее по электронной почте на deposit@geeksforgeeks.org. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.