Полезный контент
Виды ошибок в js
Syntax Error- синтаксическая ошибка, появляется когда происходит на уровне синтаксиса, то есть незакрытые скобки, пропущенная запятая и тд.Reference Error- если попытаться обратиться к несуществующей переменной.Type Error- если обратится к несуществующему свойству.Range Error- ошибка для значений, которые выходят за диапазон допустимого.new Array(10000000000)// RangeError: Недопустимая длина массиваURI Error- ошибка, которая возникает при неправильном использовании обработки URI.Eval Error- представляет ошибку, которая возникает в глобальной функцииeval()
Примеры use strict
'use strict' включает строгий режим выполнения JavaScript. Эта строка должна располагаться в самом начале скрипта, иначе строгий режим не будет работать. В строгом режиме интерпретатор будет явно выбрасывать ошибки на действия, которые ранее пропускал. Если строгий режим был включён, то отключить его для файла уже нельзя. Примеры - нельзя использовать переменные без объявления, параметры функции не могут иметь одинаковые имена, запрещено использовать зарезервированные слова.
this в use strict -> undefiend;
Var - 2 области видимости
Блочная и глобальная
Всплытие функции
при function declaration <- происходит всплытие, т.е мы можем вызвать функцию выше, чем она объявляется.
Самовызывающая функция !!! + особенности
Главной идеей является то, что анонимная функция вызывается сразу после своего объявления. Преимущество от использования самовызывающихся функций вы получите, если нужно выполнить код один раз и сохранить его резульататы во "внешней среде" ( без объявления глобальных переменных).
Named function expression
Особенность в том, что sayHi доступен только внутри тела функции, а за ее пределами - нет.
Arrow functions - arguments, new, super
Не имеет собственного объекта Arguments
Стрелочные функции не могут быть использованы как конструктор
ключевое слово yield не может быть использовано в теле стрелочной функции
нет прототипа
Чистая функция
функция, которая не производит никаких лишних и побочных вычислений. Чистая функция — это функция, которая при одинаковых значениях аргументов всегда возвращает одинаковые значения и не имеет наблюдаемых побочных эффектов.
Как перебраить объекты. getOwnPropertyNames
getOwnPropertyNames - возвращает массив со всеми свойствами. Если это объект, то возвращает ключи. МетодObject.keys()принимает объект в качестве аргумента и возвращает массив с заданными ключами объекта. МетодObject.values()принимает объект в качестве аргумента и возвращает массив с заданными значениями объекта. МетодObject.entries()принимает объект в качестве аргумента и возвращает массив с массивами, которые являются парами [key, value]данного объекта.
Копирование глубокое через рекурсию, strucredClone
В JavaScript есть функция**structuredClone()**для глубокого копирования массивов или объектов. Либо же написать свою рекурсивную функцию копирования Либо же использовать бибилиотеку lodash
С чем не работате json stringify
undefiend, функция, symbol - при вызове json stringify получаем undefiend
Методы мутирования массивов slice - splice +
splice - принимает 2 параметра, где мы указываем индексы элементов, по которым хотим обрезать и удалить лишнее slice - принимает 2 агрумента, в который копирует элементы в диапазоне, который мы укажем. concat - принимает аргументы и конкатенирует их изменяя оригинальный массив
split('')
такой сплит даст результат через ,
3 способа преобрахования строки в массив
через split() через rest оператор [...'Hello'] Array.from()
Псевдомассив <- нет методов массива
Когда мы посмотрим в свойства массива, то увидим, что он наследует прототипArrayобъекта. То есть, все свойства, которые есть в объектеArray.prototypeбудут доступны для любого массива. Если же посмотреть в свойства какого-либо псевдомассива, то можно заметить, что он наследует прототип другого объекта вместе с другими свойствами.
Weakmap weakset
Map – коллекция для хранения записей видаключ:значение. Set – коллекция для хранения множества значений, причём каждое значение может встречаться лишь один раз. WeakSet – особый видSet, не препятствующий сборщику мусора удалять свои элементы. То же самое – WeakMapдляMap.
То есть, если некий объект присутствует только вWeakSet/WeakMap – он удаляется из памяти.
Spred rest операторы
Если
...располагается в конце списка параметров функции, то это «остаточные параметры». Он собирает остальные неуказанные аргументы и делает из них массив.Если
...встретился в вызове функции или где-либо ещё, то это «оператор расширения». Он извлекает элементы из массива.
.bind(задачи на много биндов, что вызывается только 1 который привязывается) .call .apply
.seal .preventex .freeze
seal - невозможно добавить и удалить preventExtension - невозможно добавить freeze - невозможно добавить, удалить и изменить свойства
Конец цепочки прототипов - null
proto и Prototype методы
__proto__ - есть у всех объектов. почти всегда proto - это объект. Если объекты одного и того же типа, например, 2 массива или 2 объекта, то их __proto__ будут равны. __proto__ любого объекта ссылается на prototype класса с помощью которой этот объект был создан. Prototype - любой класс или любой Function имеет prototype. Прототипы это независимые объекты и они сами по себе
Состояния промисов
pending
fullfield
reject
.race .any .allSettled
Promise.allзавершается с ошибкой, если она возникает в любом из переданных промисов.Метод
Promise.allSettledвсегда ждёт завершения всех промисов. В массиве результатов будет{status:"fulfilled", value:результат}для успешных завершений,{status:"rejected", reason:ошибка}для ошибок.
Promise.raceждет только 1 выполненый промис, остальные игнорируютсяPromise.anyждет только 1 успешно выполненный промис
Event loop js ()
Event Loop - это специальный механизм на уровне движка js, который координирует работу трёх сущностей: Call Stack ( стэк вызовов), Web API (API, предоставляемый браузером), Callback Queue (очередь колбэков).
Re export
обычный экспорт в {}, так же можно использовать as что бы явно задать или изменить имя
Каррирование
Каррирование – это трансформация функций таким образом, чтобы они принимали аргументы не какf(a, b, c), а как f(a)(b)(c).