В JavaScript существует шесть основных типов данных, которые можно разделить на две группы: примитивные и ссылочные типы данных. Вот обзор этих типов данных:

  1. Примитивные типы данных. Это основные типы данных, которые непосредственно содержат значение. Они неизменяемы, то есть их значения не могут быть изменены после их создания.

а. Строка: строка представляет собой текст и заключена в одинарные или двойные кавычки. Например, «Привет, мир!» или «Привет, мир!».

б. Число: числовой тип данных представляет как целые числа, так и числа с плавающей запятой. Например, 42, 3,14, -10 или 1,5e8.

в. Логическое значение: логическое значение представляет истинные или ложные значения. Обычно они используются в условных операторах и сравнениях.

д. Null: тип данных null представляет собой преднамеренное отсутствие какого-либо значения. Он используется, чтобы указать, что переменная не должна иметь значения.

е. Undefined: переменная, которая была объявлена, но ей не присвоено значение, имеет тип undefined.

2. Справочные типы данных. Это более сложные типы данных, в которых хранятся наборы значений или более сложные сущности.

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

В дополнение к этому, JavaScript также представил новый примитивный тип данных под названием «Символ» в ECMAScript 2015 (ES6). Символы — это уникальные и неизменяемые идентификаторы, которые в основном используются в качестве ключей свойств объекта.

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

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

  1. var: Это традиционный способ объявления переменных в JavaScript. Переменные, объявленные с помощью var, имеют область действия функции или глобально. Если переменная объявлена ​​с var вне какой-либо функции, она становится глобальной переменной и доступна во всем коде. Если он объявлен внутри функции, он имеет локальную область видимости и доступен только внутри этой функции.

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

2. let: представленный в ECMAScript 2015 (ES6), let предоставляет переменные с областью действия блока. Переменные, объявленные с помощью let, доступны только внутри блока, в котором они определены, а также во всех вложенных блоках. Это помогает предотвратить случайную перезапись или доступ к переменным из-за пределов их предполагаемой области.

В отличие от var, переменные let не поднимаются наверх блока. Они инициализируются, когда выполнение кода достигает строки, где они объявлены.

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

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

Вот краткое изложение различий:

  • var: Функциональная или глобальная область действия, поднятая, может быть переназначена.
  • let: с блочной областью действия, без подъема, можно переназначить.
  • const: С блочной областью действия, без поднятия, нельзя переназначить.

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

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

  1. Объявление функции. Объявление функции, также известное как оператор функции, является наиболее распространенным способом создания функции. Он начинается с ключевого слова function, за которым следует имя функции, список параметров и тело функции, заключенное в фигурные скобки.

Пример:

function greet(name) {
  console.log('Hello, ' + name + '!');
}

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

2. Выражение функции: выражение функции создается, когда вы назначаете анонимную функцию переменной. Сама функция не имеет имени, но вы можете вызвать ее, используя переменную, которой она присвоена.

Пример:

const greet = function(name) {
  console.log('Hello, ' + name + '!');
};

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

3. Стрелочные функции. Представленные в ES6 стрелочные функции представляют собой более короткий способ записи функциональных выражений. Они используют синтаксис «толстой стрелки» (=>) и могут иметь более лаконичный синтаксис для простых функций. Стрелочные функции не имеют собственного значения this, поэтому они наследуют значение this из окружающей их области.

Пример

const greet = (name) => {
  console.log('Hello, ' + name + '!');
};

Для функций с одним параметром можно опустить круглые скобки вокруг параметра, а для функций с одной строкой можно опустить фигурные скобки и ключевое слово return:

const square = x => x * x;

4. Немедленно вызываемые функциональные выражения (IIFE): IIFE — это функциональное выражение, которое определяется и выполняется сразу после его создания. Обычно он используется для создания частной области и предотвращения загрязнения глобального пространства имен.

Пример:

(function() {
  console.log('This is an IIFE!');
})();

Вы также можете использовать стрелочные функции для IIFE:

(() => {
  console.log('This is an IIFE using an arrow function!');
})();

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

Управляющие структуры в JavaScript используются для управления потоком выполнения программы на основе определенных условий или итераций. Наиболее распространенными управляющими структурами являются циклы if, else, switch, for, while и do-while, а также операторы break и continue.

  1. if: оператор if используется для условного выполнения блока кода, если определенное условие истинно.

Пример:

if (condition) {
  // code to execute if the condition is true
}

2. else: оператор else используется в сочетании с оператором if для выполнения блока кода, если условие в операторе if ложно.

Пример:

if (condition) {
  // code to execute if the condition is true
} else {
  // code to execute if the condition is false
}

3. else if: оператор else if позволяет проверить несколько условий в одном операторе if.

Пример:

if (condition1) {
  // code to execute if condition1 is true
} else if (condition2) {
  // code to execute if condition1 is false and condition2 is true
} else {
  // code to execute if both conditions are false
}

4. switch: оператор switch используется для выполнения различных действий в зависимости от значения переменной или выражения. Это альтернатива использованию нескольких операторов if, когда вам нужно протестировать множество разных случаев.

Пример:

switch (expression) {
  case value1:
    // code to execute if expression === value1
    break;
  case value2:
    // code to execute if expression === value2
    break;
  default:
    // code to execute if none of the cases match
}

5. for: Цикл for используется для повторения блока кода определенное количество раз на основе инициализации, условия и оператора увеличения/уменьшения.

Пример:

for (let i = 0; i < 10; i++) {
  // code to execute in each iteration
}

6. while: Цикл while используется для выполнения блока кода до тех пор, пока выполняется указанное условие.

Пример:

while (condition) {
  // code to execute while the condition is true
}

7. do-while: цикл do-while аналогичен циклу while, но гарантирует выполнение блока кода хотя бы один раз, поскольку условие проверяется после первой итерации.

Пример:

do {
  // code to execute at least once
} while (condition);

8. break: оператор break используется для преждевременного выхода из цикла или оператора switch, обычно при выполнении определенного условия.

Пример:

for (let i = 0; i < 10; i++) {
  if (i === 5) {
    break; // exits the loop when i === 5
  }
}

9. continue: оператор continue используется для пропуска оставшейся части текущей итерации цикла и перехода к следующей итерации, как правило, при выполнении определенного условия.

Пример:

for (let i = 0; i < 10; i++) {
  if (i % 2 === 0) {
    continue; // skips even numbers and continues with the next iteration
  }
  console.log(i); // only odd

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

  1. Литералы объекта. Литерал объекта — это простой способ создания объекта с использованием списка пар ключ-значение, разделенных запятыми, заключенных в фигурные скобки. Ключи — это строки (или символы), а значения могут быть любого типа данных, включая другие объекты и функции (методы).

Пример:

const person = {
  name: 'John',
  age: 30,
  greet: function() {
    console.log('Hello, ' + this.name + '!');
  }
};

2. Прототипы. Каждый объект в JavaScript имеет внутреннее свойство [[Prototype]] (или __proto__), которое указывает на его объект-прототип. Объект-прототип используется для наследования, что означает, что объекты могут совместно использовать свойства и методы через свои прототипы. По умолчанию все объекты наследуют от Object.prototype.

Чтобы добавить свойства или методы к прототипу объекта, вы можете использовать свойство prototype функции-конструктора:

function Person(name, age) {
  this.name = name;
  this.age = age;
}

Person.prototype.greet = function() {
  console.log('Hello, ' + this.name + '!');
};

const person1 = new Person('John', 30);
person1.greet(); // 'Hello, John!'

3. Методы массива. Массивы — это объекты со специальными методами и свойствами для работы с упорядоченными наборами данных. Некоторые распространенные методы массива включают в себя:

  • push(): добавить элемент в конец массива
  • pop(): Удалить последний элемент из массива
  • shift(): Удалить первый элемент из массива
  • unshift(): добавить элемент в начало массива
  • slice(): вернуть неглубокую копию части массива
  • splice(): Добавить или удалить элементы из массива
  • map(): Создайте новый массив с результатами вызова предоставленной функции для каждого элемента
  • filter(): Создать новый массив со всеми элементами, прошедшими проверку, реализованную предоставленной функцией.
  • reduce(): применить функцию к аккумулятору и каждому элементу массива, чтобы уменьшить его до одного значения.
  • forEach(): выполнить предоставленную функцию один раз для каждого элемента массива

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

  • Добавление свойств к объекту: object.newProperty = value;
  • Изменение свойств объекта: object.property = newValue;
  • Удаление свойств объекта: delete object.property;
  • Добавление элементов в массив: array.push(value); или array.unshift(value);
  • Удаление элементов из массива: array.pop(); или array.shift();
  • Изменение элементов в массиве: array[index] = newValue;
  • Удаление элементов из массива: array.splice(index, 1); или delete array[index]; (обратите внимание, что delete оставляет пустое место в массиве)

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