1. Нуль против Неопределенного:
Специально для новичков иногда возникает путаница между null и undefined. Давайте проясним путаницу. Предположим, что переменная объявлена, но значение еще не присвоено, и если мы получим доступ к переменной, она даст вывод «undefined». Итак, undefined — это то, что еще не определено. С другой стороны, когда мы намеренно хотим оставить значение переменной пустым, мы используем null.
Такие как:
const _undefined; console.log(_undefined); //undefined const _null = null; console.log(_null); //null (means the variable has no value)
На приведенном ниже рисунке ясно показано, что null vs undefined. Где null означает, что есть баннер «cookies», но внутри нет файлов cookie. С другой стороны, undefined не имеет баннера, определяющего файлы cookie.
2. == vs ===:
В JavaScript очень запутанно, что именно делает тройное равенство. Давайте проясним это на примере:
const number1 = 2; const number2 = '2'; console.log(number1 == number2); //true console.log(number1 === number2); //false
В приведенном выше примере, когда используется «==», выражение дает «true», хотя «number1» — это числовой тип, а number2 — строковый тип. Итак, как они могут быть равны? В этом сценарии JavaScript принудительно выполняет приведение типов и делает переменную равной. Вот почему вывод верен, хотя типы переменных не совпадают.
Напротив, «===» выполнял фактическую работу, сравнивая значения, а также их типы. Для этого второй вывод является ложным.
3. Карта, фильтр, поиск:
Карта используется для перебора массива. Такие как,
const smartphones = [ {model: 'Iphone 12', Brand: 'Apple'}, {model: 'Galaxy S20', Brand: 'Samsung'}, {model: 'MI M10T', Brand: 'Xiaomi'}, {model: 'Oneplus 8T', Brand: 'Oneplus'}, {model: 'Oneplus 8', Brand: 'Oneplus'}, ]; smartphones.map(smartphone => console.log(smartphone.model)); output: //Iphone 12 //Galaxy S20 //MI M10T //Oneplus 8T //Oneplus 8
Фильтр используется для фильтрации массива с условием. Например, если мы хотим получить только модель смартфона Oneplus:
const filteredSmartPhone = smartphones.filter(smartphone => smartphone.Brand === 'Oneplus'); filteredSmartPhone.map(smartphone => console.log(smartphone.model)); output: //Oneplus 8T //Oneplus 8
Find используется для поиска любого определенного элемента из массива. Он возвращает одно значение:
const firstSmartPhone = smartphones.find(smartphone => smartphone.Brand === 'Oneplus'); console.log(firstSmartPhone.model); output: //Oneplus 8T
В приведенном выше примере find выбирает первое значение, которое соответствует условию, и возвращает его.
4. область действия блока:
Область видимости — важный термин в JavaScript. Сфера означает диапазон влияния. Давайте проиллюстрируем область действия блока:
function scope(permission){ if(permission){ let _scope = 'This if is a scope'; console.log(scope); } console.log(_scope); //error } scope(true);
В приведенном выше примере функция области действия представляет собой область действия блока. Внутри функции, если это блочная функция. Посмотрите, как «_scope» недоступен за пределами его области.
Вкратце, «{}» — это область действия, и все, что находится внутри нее, является свойством этой области действия, которое недоступно за ее пределами.
5. Асинхронный:
Асинхронность описывается как процесс, когда процесс не зависит (не нужно ждать) от процесса ввода-вывода. Принимая во внимание, что синхронная необходимость ожидания процесса ввода-вывода означает, что она не работает синхронно с процессом ввода-вывода. Из-за этого асинхронный не имеет зависимостей, поэтому он может выполнять больше работы за раз. Давайте проиллюстрируем пример, чтобы сделать его явным:
async function reverse(){ const _fetch = await fetch('https://jsonplaceholder.typicode.com /users'); console.log(_fetch); const res = _fetch.json(); return res; } console.log(reverse().then(res => console.log(res))); console.log('hello'); console.log(reverse()); output: Promise { <state>: "pending" } hello Promise { <state>: "pending" } //Responce //Responce //resulting array //resulting array
В приведенном выше примере оператор консоли печатается перед получением URL-адреса. Из-за «асинхронности» процесс не ожидает выборки, тогда как все процессы, описанные ниже, выполняются, и когда URL-адрес извлекается, он просто помещает вывод в цикл событий. Вот почему результирующий вывод занимает место последним, хотя вызывается первым.
6. Перевернуть строку:
const message = '.yas ot teg t'ndid ew sgniht ynam eht fo gnikniht elihW .yadot did uoy yaw eht yrc t'ndluow uoy hcum os hsiw I em rof sraet htiw dellif lla seye ruoy dnif dna esir dluohs nus eht fI .ees ot ereht ton m'I dna ,em tuohtiw strats worromot fI'; let newMessage = ''; for(let i = 0; i < message.length; i++){ newMessage = message[i] + newMessage; } console.log(newMessage);
Смотрите вывод в консоли.
7. Удалить дубликат из массива:
Существует множество способов удалить дубликаты из массива. Но я думаю, что это самое короткое из всех:
const arrayOfDuplicates = [0, 1, 1, 3, 4, 7, 11]; console.log(Array.from(new Set(arrayOfDuplicates))); output: //[0, 1, 3, 4, 7, 11]
8. Сумма элементов массива:
Я знаю, что это простая задача. Поскольку нет ничего плохого в том, чтобы сделать это снова, давайте сделаем это снова:
const _array = [1, 2, 3, 4, 5]; console.log( _array.reduce((total, currentValue) => total + currentValue,0) ); output: //15
9. Рекурсивный ряд Фибоначчи:
Лучшая практика для понимания рекурсии.
const recursiveFactorial = bound => { if(bound === 0){ return 1; }else{ return bound * recursiveFactorial(bound - 1); } } console.log(recursiveFactorial(5)); output: //120
10. Рекурсивный ряд Фибоначчи:
Простая, но одна из сложных задач:
const recursiveFibonacci = bound => { if(bound === 0){ return [0]; }else if(bound === 1){ return [0, 1]; }else{ const fibonacciSeries = recursiveFibonacci(bound - 1); const nextElement = fibonacciSeries[bound - 1] + fibonacciSeries[bound - 2]; fibonacciSeries.push(nextElement); return fibonacciSeries; } } console.log(recursiveFibonacci(5)); output: //Array(6) [ 0, 1, 1, 2, 3, 5 ]
Удачного кодирования. Дайте мне знать мои ошибки. Спасибо.