Примитивы и приведение типов

Примитивы - это простые данные, описывание сущность. Не имеют вложенных значений, но сами ими часто являются, например как элементы массивов или как значения свойств объект

Примитивные данные (ПРИМИТИВЫ)

Их 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.

👍Строки представляют собой последоватеьность проиндексированных символов. Индексация начинается с 0, то есть, первый символ строки имеет индекс 0.

СвойствоЧто хранит в себе?

str[num]

обращение к символу в строке по значению индекса, переданного через num

str.length

свойство, наследуемое конструктором String от конструктора Function, хранит длину строчного значения в value (общее количество всех символов с учетом пробелов)

МетодЧто делает?

str.localeCompare(nextStr)

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

str.charAt(num)

получает доступ к конкретному символу в строке, где num - это переданное числовое значение, указывающее на индекс искомого символа в строке

str.substring(x, y)

вернет часть строки, начиная с переданного индекса x, заканчивая индексом, стоящим перед переданным y

str.indexOf(symb)

вернет ближайший от начала индекс символа, если он найден в строке или -1, если такого символа в строке нет

конструктор Number

👍Вызов конструктора Number(value) преобразует полученное значение value к типу данных number.

СвойствоЧто хранит в себе?

Максимальное целое число, которое можно безопасно использовать в JavaScript.

МетодЧто делает?

Определяет, является ли переданное значение значением NaN

как одноименный глобальный метод parseFloat() извлекает из полученного значения value дробное число

как одноименный глобальный метод parseInt() извлекает из полученного значения value целое число

конструктор Boolean

👍Вызов конструктора Boolean(value) преобразует полученное значение value к типу данных boolean.

Приведение типов

Это процесс преобразования типа данных одного и того же значения из одного в другой, например: число с типом данных string можно преобразовать в число с типом данных number или в булевое значение с типом boolean.

Типы пребразования (приведения типов):

  1. строковое;

  2. численное;

  3. булевое.

Способы приведения

  • type casting - явное (при передаче значения в вызов конструктора String(), Number() или Boolean())

  • не явное

Когда происходит неявное приведение типов?

  1. При нестрогом сравнении ( 1 == true )

  2. При использовании логических и математических операторов, например при выполнении математических операций:

    1. ( 1 + '1' ) вернет 11, это конкатенация и приведение к строке

    2. ( 2 * '5' ) вернет 10 ( 9 / '3' ) вернет 3 ( 5 - '1' ) вернет 4 - это вычисления и приведение к числу

    3. ( !undefined ) вернет true - это приведение к булю и возврат его противоположного значения

    4. ( 1 && false ) вернет false, это приведение к булю и проверка обоих булевых значений на true, получаем результат false, потому что не оба значения true

  3. В условии ветвления ( if(value) { statements }, где value будет приведено к булевому true или false и это логично, ведь ветвление работает по принципу, если условие верно, то есть выполняется, то выполни указанные инструкции, в противном случае ничего не делай)

Давай визуализируем это в таблицу:

ЯвноеНЕ явное

строковое

String(value)

value + "value"

численное

Number(value)

+value

булевое

Boolean(value)

!value или !!value

А теперь рассмотрим примеры приведения конкретных значений:

ЗНАЧЕНИЕ (value)исходный типString(value) или value + ""Number(value) или +valueBoolean(value) или !!value

"user"

string

-

NaN

true

"2kg"

string

-

NaN

true

"100"

string

-

100

true

"1"

string

-

1

true

"0"

string

-

0

true

" "

string

-

0

true

""

string

-

0

false

1

number

"1"

-

true

Infinity

number

"Infinity"

-

true

0

number

"0"

-

false

NaN

number

"NaN"

-

false

null

object

"null"

0

false

undefined

undefined

"undefined"

NaN

false

false

boolean

"false"

0

false

true

boolean

"true"

1

-

Эта таблица нам наглядно показывает и выводит 6 ложных значений в JavaScript. То есть таких значений, что приводят к булевому false.

6 falsy values

  1. "" - пустая строка, даже без пробелов

  2. 0

  3. NaN

  4. null

  5. undefined

  6. false

👍Все остальные значения приводятся к true, поэтому достаточно запомнить эти шесть ложных.

🎉И на засыпку, еще пара специальных правил:

  1. 2 == null и 3 == undefined - не будет численного приведения, потому что так как null может равняться только null или undefined, и ничему другому.

    1. null == undefined - вернет true

    2. null == null - вернет true

    3. undefined == undefined - вернет true

    4. null == 0- вернет false

  2. NaN ничему не равен, даже самому себе.

    1. NaN == undefined - вернет false

    2. NaN == null - вернет false

    3. NaN == NaN - вернет false

    4. NaN != NaN - вернет true

Теперь давайте ближе рассмотрим операторы, ведь некоторые из них нам уже знакомы, но в программировании еще есть чему удивляться!

Last updated