5 концепций JavaScript, которые должен знать каждый разработчик React🧑‍💻

1. Оператор распространения и объектдеструктуризация

Оператор расширения, обозначаемый тремя последовательными точками (…), позволяет нам расширять итерируемые объекты, такие как массивы, строки или даже объекты, на отдельные элементы. Он предоставляет простой и лаконичный способ объединения или клонирования массивов, объединения объектов и передачи аргументов функциям.

//Array Manipulation
const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
const concatenatedArr = [...arr1, ...arr2]; // [1, 2, 3, 4, 5, 6]
const copiedArr = [...arr1]; // [1, 2, 3]
//Objecct Merging
const obj1 = { name: 'John' };
const obj2 = { age: 25 };
const mergedObj = { ...obj1, ...obj2 }; // { name: 'John', age: 25 }
//Functional Arguments
function sum(a, b, c) {
  return a + b + c;
}

const numbers = [1, 2, 3];
const result = sum(...numbers); // 6

• Деструктуризация объекта:

Деструктуризация объектов позволяет нам извлекать свойства из объектов и назначать их переменным. Он обеспечивает элегантный способ доступа и использования свойств объекта без повторяющихся точечных обозначений. Давайте рассмотрим несколько сценариев:

//Variable Assignments
const person = { name: 'Alice', age: 30 };
const { name, age } = person;
console.log(name); // 'Alice'
console.log(age); // 30
//Function Parameters
function displayInfo({ name, age }) {
  console.log(`Name: ${name}, Age: ${age}`);
}
const person = { name: 'Bob', age: 35 };
displayInfo(person); // Name: Bob, Age: 35
//Default Values
const { name = 'Unknown', country = 'USA' } = person;
console.log(name); // 'Alice'
console.log(country); // 'USA'

2. Асинхронный характер языка

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

console.log("Vineet is a good boy");

setTimeout(() => {
    console.log("Inside the setTimeout");
}, 1000);

console.log("Vineet is a bad boy");

//Above Code output
Vineet is a good boy
Vineet is a bad boy
Inside the setTimeout

3. Обещания и асинхронное ожидание

Обещания обеспечивают структурированный и интуитивно понятный способ работы с асинхронным кодом. Обещание представляет возможное завершение (или сбой) асинхронной операции и возвращает значение или ошибку. Он имеет три состояния: ожидание, выполнено или отклонено.

const fs = require("fs/promises");
fs.readFile("file.txt", "utf-8", (err, data) => {
    console.log(err, data);
})
const result = fs.readFile("file.txt", "utf-8")
result.then((data) => {
    console.log(data);
})
//In the above Code you have to create file of name file.txt

• Асинхронное ожидание:

Async/await — это синтаксис, представленный в ES2017, который упрощает работу с промисами, обеспечивая более синхронную структуру кода. Это позволяет писать асинхронный код последовательно, что упрощает его чтение и понимание. Давайте посмотрим, как работает async/await:

//Async Await function
const ReadThree = async (file1, file2, file3) => {

    const result1 = fs.readFile(file1, "utf-8")
    const result2 = fs.readFile(file2, "utf-8")
    const result3 = fs.readFile(file3, "utf-8")

    c1 = await result1
    console.log(c1);

    c2 = await result2
    console.log(c2);

    c3 = await result3
    console.log(c3);
}
ReadThree("file1.txt", "file2.txt", "file3.txt");

4. Равенство в JavaScript

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

console.log(5 == '5'); // true
console.log(true == 1); // true
console.log(null == undefined); // true

console.log(5 === '5'); // false
console.log(true === 1); // false
console.log(null === undefined); // false

5. Сопоставьте, уменьшите и отфильтруйте методы

  1. Метод Map: метод map позволяет преобразовывать каждый элемент массива в новое значение, создавая новый массив с преобразованными элементами. В качестве аргумента он принимает функцию обратного вызова, которая вызывается для каждого элемента массива. Возвращаемые значения из функции обратного вызова собираются и формируют новый массив. Вот пример:
//* Map Method in Javascript 
let nums = [10, 54, 54, 54, 5, 5, 15, 45, 4, 54, 54];

let res = nums.map((data) => {
    return data
});

console.log(res); //it returns the new array

2. Метод сокращения используется для получения одного значения из массива путем итеративной обработки каждого элемента. Он принимает функцию обратного вызова и необязательное начальное значение в качестве аргументов. Функция обратного вызова получает аккумулятор и текущий элемент в качестве параметров и возвращает обновленное значение аккумулятора. Вот пример:

//* Reduce Method in Javascript

let res3 = nums.reduce((data1, data2) => {
    return data1 + data2
})
console.log(res3);

3. Метод filter позволяет создать новый массив, содержащий элементы, соответствующие заданному условию. В качестве аргумента он принимает функцию обратного вызова, которая вызывается для каждого элемента массива. Функция обратного вызова должна возвращать логическое значение, чтобы определить, следует ли включать элемент в результирующий массив. Вот пример:

//* Filter Method in Javascript

let res2 = nums.filter((data) => {
    return data === "45"
})
console.log(res2);