Типы данных в JavaScript

Task в RS School по JavaScript

В JavaScript каждое значение всегда относится к определенному типу данных, например как строка или число.

Существует всего 8 типов данных.

Переменная может хранить в себе любой тип данных.

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

let some = '123'; // Строка   
    some = 123; // Число

Из за такой особенности язык программирования JavaScript называется “динамически типизированным”.

Это означает, что хотя типы данных существуют, переменные не привязаны к какому-либо конкретному типу.

Число или number

Числовой тип данных представляет как целые числа так и числа с плавающей точкой

let number = 123; // Простое число  
    number = 123.456; // Число с плавающей точкой

В JavaScript доступно множество операций для работы с числами, таких как умножение “*”, деление “/”, сложение “+”, вычитание “-” и другие.

Помимо обычных чисел также существуют так называемые “специальные числовые значения”, такие как “Infinity”, “-Infinity” и “NaN”, которые относятся к типу данных чисел.

NaN - расшифровывается как - Not a number

Infinity представляет математическую бесконечность. Это специальное значение, которое превосходит любое число

Значение “Infinity” можно получить есть попытаться что то поделить на ноль

console.log( 1 / 0); // Infinity

Либо вызвать его явно

console.log(infinity) // Infinity

NaN обозначает вычислительную ошибку. Это результат некорректной или неопределенной математической операции, например:

console.log("не число" / 2 ); 
// NaN, такое деление является ошибкой

Значение NaN обладает свойством «прилипания». Любая математическая операция с NaN также возвращает NaN:

console.log( NaN + 1 ); // NaN    
console.log( 3 * NaN ); // NaN   
console.log( "не число" / 2 - 1 ); // NaN 

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

Существует только одно исключение:
NaN ** 0 равно 1

BigInt

В JavaScript тип number не может безопасно обрабатывать числа, превышающие (2^53 - 1) (т.е. 9007199254740991) или меньшие, чем -(2^53 - 1) для отрицательных чисел.

Технически, тип number способен хранить очень большие целые числа (до 1.7976931348623157 * 10^308), но за пределами безопасного диапазона целых чисел ±(2^53- 1) возникает ошибка точности, так как не все цифры могут уместиться в фиксированную 64-битную память. В результате, можно хранить лишь “приблизительное” значение.

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

console.log(9007199254740991 + 1); // 9007199254740992    
console.log(9007199254740991 + 2); // 9007199254740992

В данный момент BigInt поддерживается только в браузерах Firefox, Chrome, Edge и Safari, но не поддерживается в IE.

Строка или string

В JavaScript строка (string) должна быть заключена в кавычки.

let str = "Привет, друг!";
let str2 = 'Одинарные кавычки тоже подойдут';
let phrase = `Обратные кавычки позволяют встраивать переменные ${str}`;   

В JavaScript есть 3 типа ковычек:

  • 1 Одинарные ковычки: ''
  • 2 Двойные ковычки: ""
  • 3 Обратные ковычки: ``

Двойные и одинарные кавычки считаются “простыми” и не имеют различий.

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

let name = "Dxrkd3v";

// Вставим переменную
console.log( `Привет, ${name}!` ); // Привет, Dxrkd3v!    
    
// Вставим выражение
console.log( `результат: ${1 + 2}` ); // результат: 3

Обратые ковычки еще называются backtick и исользуются для интерполяции

Boolean или Булевый (логический) тип

Булевый тип (boolean) может принимать только два значения: true (истина) и false (ложь).

Этот тип обычно используется для хранения значений да/нет: true означает “да, верно”, а false означает “нет, неверно”.

let nameFieldChecked = true; // да, поле отмечено
let ageFieldChecked = false; // нет, поле не отмечено

Булевый тип данных также может быть результатом операций сравнения:

let isGreater = 4 > 1;
alert( isGreater ); // true (результатом сравнения будет "да")

Тема про булевый тип данных будет пройдена позже более поробно

Тип данных null

Специальное значение null не относится ни к одному из вышеперечисленных типов.

Оно образует отдельный тип, включающий только значение null.

let age = null;

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

Это просто специальное значение, которое означает “ничего”, “пусто” или “значение неизвестно”.

Значение «undefined»

Специальное значение undefined создает тип из самого себя точно так же как и null.

Оно указывает на то, что ‘значение не было присвоено’.

Если переменная объявлена, но ей не присвоено никакого значения, то её значением будет undefined:

let age;
console.log(age); // выведет "undefined"

Так же можно принудительно присвоить значение undefined любой переменной

let age = 35;
// меняем значение на undefined
age = undefined;
console.log(age); // "undefined"

Однако такой подход не рекомендуется.

Обычно null используется для присвоения переменной “пустого” или “неизвестного” значения.

В то время как undefined – для проверки, была ли переменная инициализирована.

Тип данных Объект или object

В отличие от остальных типов данных object является не примитивным типом.

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

В объектах хранятся более сложные структуры например как коллекции данных.

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

Синтаксис объектов для примера

let user = {     // объект user
    name: "John",  // под ключом "name" хранится значение "John"  
    age: 30        // под ключом "age" хранится значение 30
  };

На этом лекция заканчивается.