Примитивы и приведение типов
Примитивы - это простые данные, описывание сущность. Не имеют вложенных значений, но сами ими часто являются, например как элементы массивов или как значения свойств объект
Примитивные данные (ПРИМИТИВЫ)
Их 7, но в повседневной работе мы чаще взаимодействуем с 5, а именно:
string - любое значение, заключенное в одинарные (
''
), двойные (""
) или обратные (``) кавычки, которые еще называют шаблонной строкой.number - любое числовое значение до максимально безопасного цельно численного значения ((2 в степени 53 ) - 1), что соответствует значению
9007199254740991
(это довольно много, но не для программирования и работы с данными), значения больше этого берет под свое крыло уже другой примитив - bigint, у него даже специальный объект для этого выделен, с одноименным названиемBigInt
. У этого объекта уже есть свойства и методы (рассмотрим далее), в одном из его свойствMIN_SAFE_INTEGER
хранится это максимальное значение. Кроме чисел, есть еще два значения, принадлежащие этому типу данных, этоNaN
(not a number) иInfinity
(бесконечность).boolean - два значения: true и false.
undefined - одноименное единственное значение -
undefined
.null - одноименное и также единственное значение -
null
. ВАЖНО: null возвращает object при проверке типа данных, но это не относит его к семейству объектов JavaScript. Это "специально допущенная ошибка" в JavaScript.symbol - уникальный, неизменяемый тип данных. Используется в качестве идентификатора свойств объектов. Будем его видеть, когда начнутся манипуляции Js над Html.
bigint - числовые значения больше максимально безопасного.
Примитивы:
не являются объектами;
не имеют свойств и методов (только их конструкторы:
String
Number
Boolean
иSymbol
);immutable - не изменяются (можно перезаписать примитив в другую переменную, но его самого перезаписать или изменить нельзя);
Конструкторы примитивов
👍Конструктор примитива, будь то
String
Number
Boolean
или Symbol является объектом-обёрткой.
И как мы уже знаем, примитивы не имеют свойств и методов, а объекты имеют.
Так и наши конструкторы наделены целыми наборами свойств и методов, к которым мы можем обратиться через точку после имени самого конструктора.
Рассмотрим наиболее частоиспользуемые из них, а с полным перечнем можно будет ознакомиться по ссылкам на MDN, указанным в имени каждого конструктора.
Итак, поехали!
конструктор String
👍Вызов конструктора String(value) преобразует полученное значение value к типу данных string.
👍Вызов конструктора String(value) преобразует полученное значение value к типу данных string.👍Строки представляют собой последоватеьность проиндексированных символов. Индексация начинается с 0, то есть, первый символ строки имеет индекс 0.
Свойство | Что хранит в себе? |
---|---|
str[num] | обращение к символу в строке по значению индекса, переданного через num |
str.length | свойство, наследуемое конструктором String от конструктора Function, хранит длину строчного значения в value (общее количество всех символов с учетом пробелов) |
Метод | Что делает? |
---|---|
str.localeCompare(nextStr) | возвращает число, указывающее, должна данная строка находится до, после или в том же самом месте, что и строка, переданная через параметр, при сортировке этих строк. |
str.charAt(num) | получает доступ к конкретному символу в строке, где num - это переданное числовое значение, указывающее на индекс искомого символа в строке |
str.substring(x, y) | вернет часть строки, начиная с переданного индекса |
str.indexOf(symb) | вернет ближайший от начала индекс символа, если он найден в строке или -1, если такого символа в строке нет |
конструктор Number
👍Вызов конструктора Number(value) преобразует полученное значение value к типу данных number.
👍Вызов конструктора Number(value) преобразует полученное значение value к типу данных number.Свойство | Что хранит в себе? |
---|---|
Максимальное целое число, которое можно безопасно использовать в JavaScript. |
Метод | Что делает? |
---|---|
Определяет, является ли переданное значение значением | |
как одноименный глобальный метод parseFloat() извлекает из полученного значения | |
как одноименный глобальный метод parseInt() извлекает из полученного значения |
конструктор Boolean
👍Вызов конструктора Boolean(value) преобразует полученное значение value к типу данных boolean.
👍Вызов конструктора Boolean(value) преобразует полученное значение value к типу данных boolean.Приведение типов
Это процесс преобразования типа данных одного и того же значения из одного в другой, например: число с типом данных string
можно преобразовать в число с типом данных number
или в булевое значение с типом boolean
.
Типы пребразования (приведения типов):
строковое;
численное;
булевое.
Способы приведения
type casting - явное (при передаче значения в вызов конструктора String(), Number() или Boolean())
не явное
Когда происходит неявное приведение типов?
При нестрогом сравнении ( 1
== true
)При использовании логических и математических операторов, например при выполнении математических операций:
( 1 + '1' ) вернет 11, это конкатенация и приведение к строке
( 2 * '5' ) вернет 10 ( 9 / '3' ) вернет 3 ( 5 - '1' ) вернет 4 - это вычисления и приведение к числу
( !undefined ) вернет true - это приведение к булю и возврат его противоположного значения
( 1 && false ) вернет false, это приведение к булю и проверка обоих булевых значений на true, получаем результат false, потому что не оба значения true
В условии ветвления ( if(value) { statements }, где value будет приведено к булевому true или false и это логично, ведь ветвление работает по принципу, если условие верно, то есть выполняется, то выполни указанные инструкции, в противном случае ничего не делай)
Давай визуализируем это в таблицу:
Явное | НЕ явное | |
---|---|---|
строковое | String(value) |
|
численное | Number(value) |
|
булевое | Boolean(value) |
|
А теперь рассмотрим примеры приведения конкретных значений:
ЗНАЧЕНИЕ (value) | исходный тип | String(value) или value + "" | Number(value) или +value | Boolean(value) или !!value |
---|---|---|---|---|
|
| - |
|
|
|
| - |
|
|
|
| - |
|
|
|
| - |
|
|
|
| - |
|
|
|
| - |
|
|
|
| - |
|
|
|
|
| - |
|
|
|
| - |
|
|
|
| - |
|
|
|
| - |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| - |
Эта таблица нам наглядно показывает и выводит 6 ложных значений в JavaScript. То есть таких значений, что приводят к булевому false
.
6 falsy values
""
- пустая строка, даже без пробелов0
NaN
null
undefined
false
👍
Все остальные значения приводятся к true, поэтому достаточно запомнить эти шесть ложных.
🎉
И на засыпку, еще пара специальных правил:
2 == null
и3 == undefined
- не будет численного приведения, потому что так какnull
может равняться толькоnull
илиundefined
, и ничему другому.null == undefined
- вернетtrue
null == null
- вернетtrue
undefined == undefined
- вернетtrue
null == 0
- вернетfalse
NaN
ничему не равен, даже самому себе.NaN == undefined
- вернетfalse
NaN == null
- вернетfalse
NaN == NaN
- вернетfalse
NaN != NaN
- вернетtrue
Теперь давайте ближе рассмотрим операторы, ведь некоторые из них нам уже знакомы, но в программировании еще есть чему удивляться!
Last updated