Типы данных +
1-7 - примитивные типы. 8 - объект.
string
- Строкаnumber
- Числоbigint
- Большое число (ES9)boolean
- Булевыйsymbol
- Символnull
- Пустой типundefined
- Неопределенный типobject
- Объект (функции и массивы также объекты)
Разница между примитивными типами и объектами: Примитивы иммутабельны (неизменяемы). Объекты передаются по ссылке, примитивы - по значению
// PRIMITIVES - простые типы данных
// 1. string и символ
'some-string';
Symbol(); // используется редко
// 2. number и bigint (целые числа, превышающие ±(2^53 - 1))
123;
123n; // используется редко
// 3. boolean
true || false;
// 4. undefined
undefined;
// 5. null
null;
// OBJECT - сложный тип данных, который может состоять из комбинаций различных типов
// JS раскрывает свой потенциал в объектах, кто-то скажет что в JS всё является объектами
// более подробно в другом разделе
{ a: 1, b: 2 };
// оператор typeof - определяет тип данных, возвращает строку с названием типа
typeof 'some-string'; // 'string', можно записывать еще так typeof('some-string') // typeof('some-string');
typeof Symbol(); // 'symbol'
typeof 123; // 'number'
typeof NaN; // 'number'
typeof Infinity; // number
typeof 123n; // 'bigint'
typeof true; // 'boolean'
typeof undefined; // 'undefined'
typeof null; // 'object' - это известная ошика в JS
typeof {}; // 'object'
typeof []; // 'object'
typeof new Date(); // 'object'
typeof (() => ''); // 'function'
typeof function () {}; // 'function' - это не отдельный тип данных, сделано для удобства
// проверка типа
typeof 'some-string' === 'string'; // true
typeof 123 === 'number'; // true
Различные случаи преобразования типов данных
JS - язык с динамическим преобразованием типов данных.
// 1. Строка в число (строка должна содержать цифры иначе будет NaN)
+'123'; // 123
Number('123'); // 123
Number('123abc'); // NaN
// 2.1 Число в строку
`${123}`; // '123' - I способ
123 + ''; // '123' - II способ
String(123); // '123' - III способ
(0.123).toString(); // '0.123' - IV способ
// 2.2 Другие данные в строку
String(123); // '123'
String(-12.3); // '-12.3'
String(null); // 'null'
String(undefined); // 'undefined'
String(true); // 'true'
String(false); // 'false'
String(function () {}); // 'function () {}'
String({}); // '[object Object]'
String({ key: 42 }); // '[object Object]'
String([]); // '' - пусой массив как пустая строка
String([1, 2]); // '1,2'
// 3.1 Boolean - true
Boolean('abc'); // true
Boolean(123); // true
Boolean(-123); // true
Boolean({}); // true
Boolean([]); // true
Boolean(() => ''); // true
// 3.2 Boolean - false
Boolean(0); // false
Boolean(''); // false
Boolean(null); // false
Boolean(undefined); // false
// Вместо Boolean можно использовать запись !!
!!'123'; // true
// 4.1 Number - 1
Number(true); // 1
Number([100]); // 100 - если в массиве одно значение
// 4.2 Number - 0
Number(false); // 0
Number(''); // 0
Number(null); // 0
Number([]); // 0 пустой массив
// 4.3 Number - NaN
Number('abc'); // NaN
Number({}); // NaN
Number(() => ''); // NaN
Number(undefined); // NaN
Number([100, 200, 300]); // NaN - если у массива больше одного элемента
object wrapper constructors - конструкторы-обертки для преобразования типов
- String() и Symbol() (ES6+)
- Number() и BigInt() (ES11+)
- Boolean()
- Object()