Расширенные основы бэкенда JavaScript
Начало работы с основами работы с 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, и помогите другим гикам.
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.