# ЖабаСкрипт. Конспект 2

By [Nemo](https://paragraph.com/@nemo-3) · 2022-07-18

---

Типы данных
-----------

JavaScript - язык с [динамической](https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%82%D0%B8%D0%BF%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F) типизацией. Это означает, что дна и та же переменная может быть разных типов в разных участках кода, например, в один момент переменная является числом, а в другой, строкой:

    let message = "hello";
    message = 123456;
    

### Числа

Данный тип данных может хранить целые числа и числа с плавающей точкой.

    let myNumber = 314;
    myNumber = 3.14;  
    

### NaN

Любая математическая операция с `NaN` возвращает `NaN`

    alert(NaN + 1); // NaN
    alert(1 * NaN); // NaN
    alert("строка" / 2); // NaN
    //Но
    alert(NaN ** 0); //1
    //P.S 
    //** - возведение в степень
    

### Оскорблять меня весело и безопасно

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

### BigInt

Диапазон значений чисел в JS - от -(2^53 - 1) до 2^53 - 1, но, существует тип данных, позволяющий хранить числа, большие этих значений - `BigInt`. Для того, чтобы создать число типа `BigInt`, необходимо добавить “n“ в конец числа:

    // символ "n" в конце означает, что это BigInt
    const bigInt = 1234567890123456789012345678901234567890n;
    

### Строки

Строкой считается любая последовательность символов, заключенная в кавычки. Выражение внутри `${…}` вычисляется, и его результат становится частью строки.

    let str = "Строка";
    let str2 = 'Строка с одинарными кавычками';
    let phrase = `Обратные кавычки позволяют встраивать переменные ${str}`;
    let name = "Иван";
    alert( `Привет, ${name}!` ); // Привет, Иван!
    

### Boolean

Переменная типа bool может принимать только два значения true и false.

    let isGreater = 4 > 1;
    alert( isGreater ); // true (истина)
    isGreater = 1 > 4;
    alert( isGreater ); // false (ложь)
    

### Null

Это просто специальное значение, которое представляет собой «ничего», «пусто» или «значение неизвестно».

    let age = null; // значение age неизвестно
    

### Undefined

Undefined означает, что значение еще не было присвоено.

    let age;
    alert(age); // выведет "undefined"
    

Обычно `null` используется для присвоения переменной «пустого» или «неизвестного» значения, а `undefined` – для проверок, была ли переменная назначена.

### Особые типы

Тип `object` и `symbol` - особенные. `object` для более сложных структур данных, а `symbol` для уникальных идентификаторов.

### Оператор typeof

Оператор `typeof` возвращает тип аргумента. У него есть две синтаксические формы:

1.  Синтаксис оператора: `typeof x`.
    
2.  Синтаксис функции: `typeof(x)`.
    

Работает со скобками или без скобок. Результат одинаковый.

    typeof undefined // "undefined"
    typeof 0 // "number"
    typeof 10n // "bigint"
    typeof true // "boolean"
    typeof "foo" // "string"
    typeof Symbol("id") // "symbol"
    typeof Math // "object" 
    typeof null // "object" 
    typeof alert // "function" 
    

### Преобразование типов

Преобразование типов в JS - преобразование значений из одного типа в значения другого типа.

Для преобразования строк используется функция `String(value)`.

    let value = true;
    alert(typeof value); // boolean
    value = String(value); // теперь value это строка "true"
    alert(typeof value); // string
    

Численное преобразование происходит в математических функциях и выражениях. Например, когда операция деления `/` применяется не к числу:

    alert( "6" / "2" ); // выведет "3"
    

Для явного преобразования строки в число используется функция `Number(value)`.

    let str = "123";
    alert(typeof str); // string
    let num = Number(str); // становится числом 123
    

Если строка не может быть явно приведена к числу, то результатом преобразования будет `NaN`. Примеры явного преобразования в число:

    alert(Number(" 123 ")); // 123
    alert(Number("123z"));      // NaN (ошибка чтения числа на месте символа "z")
    alert(Number(true));        // 1
    alert(Number(false));       // 0
    alert(Number(undefined)) // undefined при численном преобразовании становится NaN, не 0.
    

### Логическое преобразование

Для логического преобразования используется функция `Boolean(value)`. Преобразование происходит по следующему правилу: `null`, `undefined` и `NaN`, становятся `false`, остальные значения становятся `true`. Важно: строка с нулём `"0"` — это `true`.

    alert(Boolean("0")); // true
    alert(Boolean(" ")); // пробел это тоже true, т.к строка непуста 
    alert(Boolean("")); // false
    

### Ссылки:

[https://learn.javascript.ru/types](https://learn.javascript.ru/types)

---

*Originally published on [Nemo](https://paragraph.com/@nemo-3/2)*
