Функции

  • пусть и const
  • Стрелочные функции
  • экспорт и импорт
  • Классы
  • Параметры распространения и отдыха
  • Разрушение
  • Литералы шаблонов
  • Функции массива
  • Асинхронный код

пусть и const

разрешить

Ключевое слово let используется для объявления переменной блочной области, что означает, что переменная доступна только внутри блока, в котором она была объявлена. Блок определяется фигурными скобками {}

let можно переназначить другим значениям, но нельзя повторно объявить.

if (true) { 
   let x = 10;
   x=15; //reassigned
   console.log(x); // outputs 15 
} 
console.log(x); // Uncaught ReferenceError: x is not defined
let y= 5;
let y= 10; // Error: Identifier 'x' has already been declared

константа

Ключевое слово const используется для объявления константной переменной, что означает, что после того, как ей присвоено значение, ее нельзя переназначить. Как и let, он также имеет блочную область видимости.

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

const PI = 3.14;
PI = 3; // Uncaught TypeError: Assignment to constant variable.

if (true) {
  const x = 10;
  console.log(x); // outputs 10
}

console.log(x); // Uncaught ReferenceError: x is not defined

Стрелочные функции

Стрелочные функции — это сокращенный синтаксис для создания функций в JavaScript. Он обеспечивает более лаконичный и выразительный способ записи функциональных выражений.

Syntax
(parameters) => { statements }
  • Параметры: список входных параметров функции, заключенный в круглые скобки. Если функция не принимает параметров, скобки можно опустить или использовать пустую пару скобок().
  • Стрелка: толстая стрелка =›, отделяющая параметры от тела функции.
  • Тело функции: набор операторов, которые выполняются при вызове функции. Если функция состоит из одного выражения, фигурные скобки {} и ключевое слово return можно опустить.
// Function with no parameters
const greet = () => console.log('Hello!');

// Function with one parameter
const double = x => x * 2;

// Function with multiple parameters
const add = (x, y) => x + y;

// Function with multiple statements in the body
const printMessage = (name, message) => {
  console.log(`${name}: ${message}`);
};

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

Преимущества:

  • Краткий синтаксис: стрелочные функции имеют более лаконичный синтаксис, чем традиционные функции, что упрощает чтение и запись кода. Обычно для них требуется меньше кода и меньше символов, чем для традиционных функций, что помогает снизить вероятность ошибок.
  • Неявный возврат. Функции со стрелками автоматически возвращают результат выражения или инструкции внутри тела функции без необходимости использования ключевого слова return. Это может помочь уменьшить объем кода, необходимого для написания функции, и сделать код более читабельным.
  • Лексический this: стрелочные функции захватывают значение this из окружающей области, а не создают собственное this значение. Это может помочь избежать путаницы и ошибок при работе с thisв объектно-ориентированном программировании.
  • Нет привязки this: функции со стрелками не связывают свои собственные this, поэтому значение this внутри функции совпадает со значением thisза пределами функции. Это может помочь упростить код и сделать его более понятным.
  • Неявное связывание this: функции со стрелками наследуют значение this из своей лексической объемлющей области, что упрощает доступ к значению thisиз родительских функций или методов.

экспорт и импорт

В JavaScript операторы exports и imports используются для определения и доступа к модулям, которые являются автономными частями. кода, который можно повторно использовать в нескольких файлах и проектах.

экспорт:

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

// math.js
const add = (x, y) => x + y;
const subtract = (x, y) => x - y;

exports.add = add;
exports.subtract = subtract;

В этом примере функции добавить и вычитать определены в модуле math.js, а функция Оператор >exports используется, чтобы сделать их доступными для использования за пределами модуля.

импорт:

Оператор imports используется для доступа к частям модуля, которые были экспортированы с помощью оператора exports. Его можно использовать для импорта функций, переменных и объектов, а также классов, интерфейсов и других типов кода.

// app.js
import { add, subtract } from './math.js';

console.log(add(1, 2));      // Outputs 3
console.log(subtract(5, 3)); // Outputs 2

В этом примере функции добавить и вычесть импортируются из модуля math.js с помощью import, а затем используются в модуле app.js.

Классы

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

class MyClass {
  constructor(param1, param2) {
    this.property1 = param1;
    this.property2 = param2;
  }

  method1() {
    // Method implementation
  }

  method2() {
    // Method implementation
  }
}

В этом примере класс MyClass определяется с помощью конструктора, который принимает два параметра и присваивает их свойствам класса property1 и property2. Класс также включает два метода, method1 и method2, которые можно вызывать для экземпляров класса.

  • Чтобы создать экземпляр класса, вы можете использовать ключевое слово new:
const myObj = new MyClass('value1', 'value2');

Это создаст новый экземпляр MyClass со свойствами property1 и property2, для которых заданы значения value1 и . значение2 соответственно.

  • Классы в JavaScript также могут наследовать свойства и поведение других классов с помощью ключевого слова extends:
class MySubClass extends MyClass {
  constructor(param1, param2, param3) {
    super(param1, param2);
    this.property3 = param3;
  }

  method3() {
    // Method implementation
  }
}

В этом примере класс MySubClass расширяет класс MyClass и добавляет новое свойство property3 и метод method3. Ключевое слово super используется для вызова конструктора родительского класса и передачи аргументов param1 и param2. Экземпляры MySubClass будут иметь доступ к методам и свойствам, определенным как в MyClass, так и в MySubClass.

Распространение и остальные параметры

В JavaScript параметры распространения и остатка — это способы работы с массивами и объектами, упрощающие написание более чистого и лаконичного кода.

Оператор спреда:

  • Синтаксис расширения используется для «распространения» элементов массива или объекта в другой массив или объект.
  • Он обозначается оператором .
const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];

const arr3 = [...arr1, ...arr2];

console.log(arr3); // Outputs [1, 2, 3, 4, 5, 6]

В этом примере синтаксис расширения используется для объединения массивов arr1 и arr2 в новый массив arr3.

  • Синтаксис распространения также можно использовать с объектами для создания нового объекта, который сочетает в себе свойства нескольких объектов.
const obj1 = { a: 1, b: 2 };
const obj2 = { c: 3, d: 4 };

const obj3 = { ...obj1, ...obj2 };

console.log(obj3); // Outputs { a: 1, b: 2, c: 3, d: 4 }

В этом примере синтаксис распространения используется для объединения объектов obj1 и obj2 в новый объектobj3.

Остальные параметры:

  • Оставшийся параметр, также обозначаемый оператором , используется для представления неопределенного числа аргументов в виде массива.
  • Обычно он используется в определениях функций для обработки списков аргументов переменной длины.
function sum(...numbers) {
  return numbers.reduce((acc, curr) => acc + curr, 0);
}

console.log(sum(1, 2, 3, 4)); // Outputs 10

В этом примере функция sum принимает неопределенное количество аргументов, используя синтаксис остальных параметров. Параметр numbers — это массив, содержащий все аргументы, переданные функции.

Разрушение

  • Деструктуризация — это способ извлечь значения из массивов и объектов и присвоить их переменным более кратким способом.
  • Его можно использовать с массивами, объектами и даже вложенными структурами.

Уничтожение с помощью массива

const arr = [1, 2, 3];

const [a, b, c] = arr;

console.log(a); // Outputs 1
console.log(b); // Outputs 2
console.log(c); // Outputs 3

В этом примере синтаксис деструктурирования используется для извлечения значений массива arr и присвоения их переменным a, b и с.

Уничтожение с помощью объекта

const obj = { a: 1, b: 2, c: 3 };

const { a, b, c } = obj;

console.log(a); // Outputs 1
console.log(b); // Outputs 2
console.log(c); // Outputs 3

В этом примере синтаксис деструктурирования используется для извлечения значений свойств объекта obj a, b и c и назначить их переменным с теми же именами.

Удаление с помощью вложенных структур

const obj = { 
  a: 1, 
  b: { 
    c: 2, 
    d: 3 
  }
};

const { a, b: { c, d } } = obj;

console.log(a); // Outputs 1
console.log(c); // Outputs 2
console.log(d); // Outputs 3

В этом примере синтаксис деструктурирования используется для извлечения значений свойств объекта obj a, b.c и b.d и назначить их переменным с теми же именами.

Литералы шаблонов

  • Литералы шаблонов позволяют упростить интерполяцию строк и форматирование многострочных строк в JavaScript.
  • Вместо использования традиционных одинарных или двойных кавычек для определения строки литералы шаблонов заключаются в обратные кавычки (`). В литерал шаблона можно вставлять переменные или выражения с использованием синтаксиса ${…}, которые будут оцениваться и заменяться их значениями во время выполнения.
const name = "John";
const age = 25;
const message = `My name is ${name} and I am ${age} years old.`;
console.log(message);//My name is John and I am 25 years old.
  • Литералы шаблонов также упрощают создание многострочных строк, поскольку они могут включать разрывы строк и отступы без необходимости использования escape-символов или конкатенации.
const multiline = `
  This is a
  multiline
  string.`;
console.log(multiline);

Это выведет:

  This is a
  multiline
  string.

Функции массива

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

  • Array.from():Этот метод создает новый массив из итерируемого объекта или объекта, подобного массиву, такого как NodeList или строка.
const str = 'hello';
const arr = Array.from(str);
console.log(arr); // Output: ['h', 'e', 'l', 'l', 'o']
  • Array.find(). Этот метод возвращает первый элемент массива, удовлетворяющий заданному условию. Если ни один элемент не удовлетворяет условию, возвращается значение undefined.
const numbers = [1, 2, 3, 4, 5];
const evenNumber = numbers.find(num => num % 2 === 0);
console.log(evenNumber); // Output: 2
  • Array.findIndex(). Этот метод возвращает индекс первого элемента массива, удовлетворяющего заданному условию. Если ни один элемент не удовлетворяет условию, возвращается -1.
const numbers = [1, 2, 3, 4, 5];
const evenNumberIndex = numbers.findIndex(num => num % 2 === 0);
console.log(evenNumberIndex); // Output: 1
  • Array.some():Этот метод возвращает значение true, если хотя бы один элемент в массиве удовлетворяет заданному условию, в противном случае он возвращает значение false.
const numbers = [1, 2, 3, 4, 5];
const hasEvenNumber = numbers.some(num => num % 2 === 0);
console.log(hasEvenNumber); // Output: true
  • Array.every(): этот метод возвращает значение true, если все элементы массива удовлетворяют заданному условию, в противном случае он возвращает значение false.
const numbers = [2, 4, 6, 8, 10];
const areAllEvenNumbers = numbers.every(num => num % 2 === 0);
console.log(areAllEvenNumbers); // Output: true
  • Array.includes(): этот метод проверяет, содержит ли массив определенное значение, и соответственно возвращает true или false.
const numbers = [1, 2, 3, 4, 5];
const includesThree = numbers.includes(3);
console.log(includesThree); // Output: true

Асинхронный код

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

Обещания:

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

Ожидание: начальное состояние обещания. Обещание не выполняется и не отвергается.

Выполнено: состояние обещания, когда оно успешно разрешено. Обещание возвращает значение.

Отклонено: состояние обещания, когда оно не может быть разрешено. Обещание возвращает ошибку.

const myPromise = new Promise((resolve, reject) => {
  // Do some asynchronous operation
  setTimeout(() => {
    const randomNum = Math.floor(Math.random() * 10);
    if (randomNum < 5) {
      resolve(randomNum); // fulfilled state
    } else {
      reject('Number is greater than or equal to 5'); // rejected state
    }
  }, 1000);
});

myPromise
  .then((result) => {
    console.log(result); // Output: A number less than 5
  })
  .catch((error) => {
    console.error(error); // Output: Number is greater than or equal to 5
  });

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

Затем мы обрабатываем обещание, используя метод .then(), который вызывается, когда обещание выполнено, и метод .catch(), который вызывается, когда обещание отклонено. Это позволяет нам легко обрабатывать результаты обещания в ясной и лаконичной форме.

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

  • Синтаксис async/await упрощает использование промисов, позволяя разработчикам писать асинхронный код, который выглядит и воспринимается как синхронный код.
  • Ключевое слово async используется для определения функции как асинхронной, а ключевое слово await используется для ожидания Обещайте решить, прежде чем продолжить выполнение.
async function getData() {
  const response = await fetch('https://example.com/data');
  const data = await response.json();
  return data;
}

getData().then((data) => {
  console.log(data);
}).catch((error) => {
  console.error(error);
});

Этот код определяет асинхронную функцию getData, которая извлекает данные из URL-адреса и возвращает их в формате JSON. Ключевое слово await используется для ожидания разрешения обещания, возвращаемого методом fetch(), прежде чем продолжить синтаксический анализ ответа JSON.

Функции стрелок:

  • Стрелочные функции обеспечивают краткий синтаксис для определения функций в JavaScript.
  • Они особенно полезны для написания функций обратного вызова и могут упростить чтение и понимание кода.
const numbers = [1, 2, 3, 4, 5];
const doubledNumbers = numbers.map((num) => num * 2);
console.log(doubledNumbers);

Этот код использует стрелочную функцию в качестве функции обратного вызова для метода map(), который принимает массив чисел и удваивает каждое значение.