Рубрики

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

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

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

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

  • «==» приводит к типам входных данных, то есть заставляет переменную быть одинаковой, а затем проверяет их равенство.
  • «===» на самом деле требует эквивалентных типов для получения истинного результата. По сути, «===» используется более широко, а «==» следует использовать только тогда, когда мы действительно знаем эквивалентность типов входных данных. Ниже приведена таблица, которая четко определяет, для каких значений они оба отправят TRUE или FALSE.

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

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

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

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

Значения правды JavaScript

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

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

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

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

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

Пример:

var arr = [];

arr.test = 'test'; // создаем свойство с именем test

Array.prototype.test = 'test1' // создание прототипа на объекте массива

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

test

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

Прототип Цепи

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

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

   

var arr = [1, 2, 3];

arr.length = 'test'; // длина также является фактическим свойством массива и недоступна для записи

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

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

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

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

Пример:-

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

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

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

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

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

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

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

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

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

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

Пример:-

var x = 50;

function test() {

      var x = 42;

      function printvaluex(){

             console.log(x);

      }

}

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

Эта статья предоставлена Анирудх Ачарьей . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

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

Рекомендуемые посты:

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

0.00 (0%) 0 votes