---
title: Типы и преобразования JavaScript
seo:
  description: >-
    Тема «Типы и преобразования JavaScript» для собеседования React Developer.
    Какие есть типы данных в JavaScript? В чем разница между null и undefined?
  title: Типы и преобразования JavaScript — React Developer
---

[Все темы React Developer](/prep/react-developer)

Подтемы:

- [Типы данных](#q-14bee738d69b8121aa7de8b0a5f88398)
- [Сравнение типов данных](#q-14bee738d69b81849682e847b5195a72)
- [Ложные значения](#q-14bee738d69b8187b4becf6f9eb336c7)
- [Преобразование типов](#q-14bee738d69b81d5a845dba0cf376f19)

## <strong>Какие есть типы данных в JavaScript?</strong> [#q-14bee738d69b8121aa7de8b0a5f88398]

Типы данных в JavaScript&#58;

{/* prettier-ignore */}
1. <strong>Примитивные типы</strong>&#58;

    - <code>Number</code>&#58; Числовые значения, включая целые и дробные числа.

    - <code>String</code>&#58; Строки текста.

    - <code>Boolean</code>&#58; Логические значения (true и false).

    - <code>Undefined</code>&#58; Значение переменной, которой не присвоено значение.

    - <code>Null</code>&#58; Специальное значение, представляющее отсутствие какого-либо значения.

    - <code>Symbol</code>&#58; Уникальные и неизменяемые идентификаторы.

    - <code>BigInt</code>&#58; Числа произвольной точности, используемые для работы с очень большими целыми числами.

1. Объектный тип Object и примеры его разновидностей&#58;

    - <code>Object</code>&#58; Коллекция свойств и методов.

    - <code>Array</code>&#58; Упорядоченные коллекции значений.

    - <code>Function</code>&#58; Объекты, которые можно вызывать как функции.

    - <code>Date</code>&#58; Объекты для работы с датами и временем.

    - <code>RegExp</code>&#58; Регулярные выражения для поиска и замены в строках.

    - <code>Map</code>&#58; Коллекция ключ-значение.

    - <code>Set</code>&#58; Коллекция уникальных значений.

:::note[Ссылки для изучения]

1. [Типы JavaScript, null и undefined](https://learn.javascript.ru/types)
   :::

---

## <strong>В чем разница между</strong> <code>null</code> <strong>и</strong> <code>undefined</code><strong>?</strong> [#q-14bee738d69b81849682e847b5195a72]

Разница между <code>null</code> и <code>undefined</code> в JavaScript&#58;

{/* prettier-ignore */}
1. <code>undefined</code>&#58;

    - <strong>Значение</strong>&#58; Переменная объявлена, но не инициализирована.

    - <strong>Тип</strong>&#58; <code>undefined</code>.

    - <strong>Примеры использования</strong>&#58;

        ```javascript
        let a;
        console.log(a); // undefined
        ```

1. <code>null</code>&#58;

    - <strong>Значение</strong>&#58; Явное указание на отсутствие значения или "ничто".

    - null является единственным значением примитивного типа Null. typeof null возвращает строку "object" из-за исторической особенности JavaScript.

    - <strong>Примеры использования</strong>&#58;

        ```javascript
        let b = null;
        console.log(b); // null
        ```

#### Основные различия&#58;

- <strong>Назначение</strong>&#58; <code>undefined</code> означает, что
  переменная не инициализирована, а <code>null</code> указывает на намеренное
  отсутствие значения.

- null является единственным значением примитивного типа Null. typeof null возвращает строку "object" из-за исторической особенности JavaScript.

:::note[Ссылки для изучения]

1. [Типы JavaScript, null и undefined](https://learn.javascript.ru/types)
   :::

---

## <strong>В чем разница между операторами</strong> <code>&#34;&#61;&#61;&#34;</code> <strong>и</strong> <code>&#34;&#61;&#61;&#61;&#34;</code><strong>?</strong> [#q-14bee738d69b81ce86a9fecdeec3febe]

Разница между <code>&#34;&#61;&#61;&#34;</code> и <code>&#34;&#61;&#61;&#61;&#34;</code> в JavaScript

{/* prettier-ignore */}
1. <strong>Оператор "==" (нестрогое равенство)</strong>&#58;

    - <strong>Сравнивает значения после приведения типов</strong>.

    - Пример&#58;

        ```javascript
        console.log(2 == '2'); // true (число и строка приводятся к одному типу)
        console.log(null == undefined); // true
        ```

1. <strong>Оператор "===" (строгое равенство)</strong>&#58;

    - <strong>Сравнивает значения без приведения типов</strong>.

    - Пример&#58;

        ```javascript
        console.log(2 === '2'); // false (разные типы: число и строка)
        console.log(null === undefined); // false
        ```

#### Основные различия&#58;

- <strong>Приведение типов</strong>&#58; "==" приводит операнды к одному типу
  перед сравнением, а "===" не приводит и сравнивает типы и значения напрямую.

- <strong>Использование</strong>&#58; "===" предпочтительнее использовать для
  точных сравнений, чтобы избежать непредвиденных результатов из-за приведения
  типов.

:::note[Ссылки для изучения]

1. [Строгое и нестрогое равенство JavaScript](https://learn.javascript.ru/comparison)
   :::

---

## <strong>Почему результатом сравнения двух похожих объектов является</strong> <code>false</code><strong>?</strong> [#q-14bee738d69b81f18097fbfac0d7b871]

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

#### Пример&#58;

```javascript
let obj1 = { a: 1 };
let obj2 = { a: 1 };

console.log(obj1 === obj2); // false
console.log(obj1 == obj2); // false
```

#### Объяснение&#58;

{/* prettier-ignore */}
- <strong>Сравнение по ссылке</strong>&#58; <code>obj1</code> и <code>obj2</code> содержат одинаковые данные, но находятся в разных местах памяти. Сравнение этих объектов будет <code>false</code>, так как их ссылки разные.

- <strong>Сравнение примитивов</strong>&#58; Для примитивных типов (числа, строки, логические значения и т. д.) сравнение выполняется по значению, а не по ссылке.

:::note[Ссылки для изучения]

1. [Почему разные объекты не равны: сравнение по ссылке](https://learn.javascript.ru/object-copy)
2. [Сравнение объектов по ссылке и useMemo. webDev, с 8:09](https://www.youtube.com/watch?v=OM-UNgMvvDk&t=489s)

:::

---

## <strong>Какие значения в JS являются ложными?</strong> [#q-14bee738d69b8187b4becf6f9eb336c7]

В JavaScript следующие значения считаются ложными (<code>falsy</code>)&#58;

1. <code>false</code>

1. <code>0</code>

1. -0

1. <code>0n</code> (<code>BigInt</code> ноль)

1. <code>&#34;&#34;</code> (пустая строка)

1. <code>null</code>

1. <code>undefined</code>

1. <code>NaN</code>

#### Пример&#58;

```javascript
if (!false) console.log("Falsy"); // Falsy
if (!0) console.log("Falsy"); // Falsy
if (!-0) console.log("Falsy"); // Falsy
if (!0n) console.log("Falsy"); // Falsy
if (!"") console.log("Falsy"); // Falsy
if (!null) console.log("Falsy"); // Falsy
if (!undefined) console.log("Falsy"); // Falsy
if (!NaN) console.log("Falsy"); // Falsy
```

Эти значения считаются ложными в контексте логических операций и условий.

:::note[Ссылки для изучения]

1. [Ложноподобные значения в JavaScript](https://developer.mozilla.org/ru/docs/Glossary/Falsy)
   :::

---

## <strong>Как проверить, является ли значение ложным?</strong> [#q-14bee738d69b810b8353f145bbecbc59]

Для проверки, является ли значение ложным (<code>falsy</code>), можно использовать логическое отрицание или приведение к логическому типу.

#### Способы проверки&#58;

{/* prettier-ignore */}
1. <strong>Логическое отрицание</strong>&#58;

    - Примените одно отрицание&#58; !value равно true для falsy-значения. Двойное отрицание !!value преобразует значение в Boolean и даёт false для falsy.

    - Пример&#58;

        ```javascript
        let value = 0;
        if (!value) {
            console.log("The value is falsy");
        }
        ```

1. <strong>Приведение к логическому типу</strong>&#58;

    - Использовать конструкцию <code>Boolean&#40;&#41;</code> для явного приведения значения к логическому типу.

    - Пример&#58;

        ```javascript
        let value = "";
        if (Boolean(value) === false) {
            console.log("The value is falsy");
        }
        ```

#### Примеры&#58;

```javascript
let value1 = null;
console.log(!value1); // true - значение ложное

let value2 = "hello";
console.log(Boolean(value2)); // true - значение истинное

let value3 = undefined;
if (!value3) {
  console.log("The value is falsy"); // Вывод: The value is falsy
}
```

:::note[Ссылки для изучения]

1. [Проверка falsy: логическое отрицание и Boolean](https://learn.javascript.ru/logical-operators)
   :::

---

## <strong>Является ли использование унарного плюса (оператор "+") самым быстрым способом преобразования строки в число?</strong> [#q-14bee738d69b81d5a845dba0cf376f19]

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

#### Основные характеристики&#58;

{/* prettier-ignore */}
1. <strong>Унарный плюс</strong>&#58;

    - Преобразует строку в число.

    - Пример&#58;

        ```javascript
        let str = "123";
        let num = +str;
        console.log(num); // 123
        ```

1. <strong>Альтернативные методы</strong>&#58;

    - <code>parseInt&#40;&#41;</code>&#58; Преобразует строку в целое число.

        ```javascript
        let num = parseInt("123", 10); // 123
        ```

    - <code>parseFloat&#40;&#41;</code>&#58; Преобразует строку в число с плавающей запятой.

        ```javascript
        let num = parseFloat("123.45"); // 123.45
        ```

    - <code>Number&#40;&#41;</code>&#58; Преобразует строку в число.

        ```javascript
        let num = Number("123"); // 123
        ```

#### Преимущества унарного плюса&#58;

- Семантика&#58; + и Number требуют числового представления всей строки. parseInt и parseFloat разбирают допустимый числовой префикс&#58; например, Number("12px") даёт NaN, а parseInt("12px", 10) даёт 12.

- <strong>Краткость</strong>&#58; Унарный плюс — это краткий и лаконичный способ
  преобразования строки в число.

:::note[Ссылки для изучения]

1. [Унарный плюс: числовое преобразование и семантика](https://learn.javascript.ru/operators)
   :::
