Владислав Калачев

Учимся кодить на JavaScript. Типы данных.

460

Доброго времени суток, друзья. На сколько хорошо вы знаете JavaScript? Может вы опытный разработчик? Или только начинаете свою карьеру? В любом случае, без хорошего знания теоретических основ языка нельзя стать профессионалом, писать высококачественный и надежный код. В данной серии статей я хочу разобрать самые базовые основы языка и сегодня мы рассмотрим на примерах типы данных, которые имеются в JavaScript.

Видео на эту тему.

О типах в JS

В JavaScript одной переменной можно присвоить значение разных типов.

Пример:


let text = 999;
text = "data";

Дело в том, что данный язык является «динамически типизированным» (или еще называют «слабо типизированным» ) языком программирования. Т.е. переменные не привязаны к типу данных и могут быть изменены в ходе выполнения программы.  Таким образом происходит автоматическое определение типов.

На текущий момент (2020 год) существует 8 основных типов данных. Они делятся на две категории: (1) примитивные и (2) объекты. «Примитивными» называют типы, значения которых могут быть только простыми. К ним относятся:

—   number (Числа)bigInt (Большие числа)

— string (Строки)

— boolean (Булевый тип)

— undefined (Неопределенный тип)

— null

— Symbol

«Объекты» предназначены для хранения коллекций, а также для создания новых структур данных. Давайте подробно разберем каждый из этих типов.

Number

Числовой тип в JavaScript могут иметь как целочисленные так и дробные значения. Этот тип хранится в 64-битном формате IEEE-754.

Пример:


let a = 10
let b = 1.2

Для работы с числами возможно использовать стандартные математические операции, например, сложение (+), вычитание (-), деление (/), умножение (*).

Пример:


let a = 10 + 2
let b = 20 - a

Число можно записывать в двоичном, восьмеричном и шестнадцатеричном формате.

Пример:


0b100101100 // 300 в двоичной 
0o454 // 300 в восьмеричной
0x12c // 300 в шестнадцатеричной

JavaScript имеет несколько функций для округления чисел. Посмотрим на каждую из них:

Math.round — округляет до ближайшего целого

Math.ceil — округляет в большую сторону

Math.floor — округляет  в меньшую сторону

Чтобы получить самое большое или самое маленькое значение типа number можно воспользоваться объектом Number и вызвать у него свойства MAX_VALUE и MIN_VALUE.

Пример:


Number.MAX_VALUE
// 1.7976931348623157e+308
Number.MIN_VALUE
// 5e-324

Часто на собеседованиях задают такой вопрос: 0.1 + 0.2 == 0.3 

Будет ли данное сравнение истинным? Нет


0.1 + 0.2 == 0.3 // false

Если сложить 0.1 и 0.2, мы получим погрешность: 0.1 + 0.2 = 0.30000000000000004

Дело в том, что во время вычислений происходит потеря точности в момент деления чисел при получении значений 0.1 и 0.3. Данной проблемой в погрешности при вычислении чисел с плавающей запятой страдают все языки, поддерживающие формат IEEE-754 (Java, C,  Ruby, Perl, PHP).

BigInt

Большие числа в JavaScript появились совсем недавно. Обычный тип number не может использовать число большее, чем 2 в 53 (-2 в 53). Этот тип используется для работы со значениями, превышающими длину 16 цифр. Пример использования bigInt вы сможете найти в этой статье.

String

Строковой тип предназначен для работы с текстовыми данными.  Для его обозначения используются кавычки. В JavaScript имеется несколько типов кавычек:

» » — двойные

‘ ‘ — одинарные

` ` — обратные.

Обратные кавычки предназначены для добавления выражении в строку. Для этого достаточно добавить изменяемое значение в такую запись ${}

Пример:


let hi = `Hello ${name}!`

Одинарные и двойные кавычки имеют одинаковое функциональное значение и предназначены для обычной записи  строкового типа.

Пример:


let str = "Text"

Строка состоит из ряда элементов, которые имеют свои индексы. Первым индексом является 0. 

Пример:


let str = "Text"
str[0] // T

Используя метод length можно получить длину строки, которая будет равна количеству элементов строки.

Пример:


str.length // 4

Для получения последнего символа в строке нужно вычесть 1 из длины строки.

Пример:


let str = "Text!"
str[str.length - 1] // !

Имеется возможность переносить текст на новую строку, для чего достаточно добавить спецсимвол \n в месте, где нужно произвести перенос.

Пример:


let text = "Hello \n Mary"
// Hello 
// Mary

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

Строка является иммутабельным типом. Если попытаться изменить одну букву, то исходная строка не поменяется.

Пример:


let text = "Text"
text[0] = "A" // error

Для изменения значения строки следует полностью переопределить переменную.

Пример:


let text = "Text"
text = "Text2"

Изменение регистров в строках. Для этого в JavaScript имеется два метода. Для перевода в верхний регистр toUpperCase и toLowerCase для перевода в нижний, соответственно.

Пример:


"Text".toUpperCase() // TEXT
"Text".toLowerCase() // text

На этом мы закончим. Данный тип имеет большое количество методов, которые будет рассмотрены в отдельной статье. Перейдем к другим нашим типам.

Boolean

Булевый ( Логический ) тип. Данный тип появился благодаря Булевой алгебре. Он имеет всего два значения:

true — истина, да

false — ложь, нет

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

Пример:


1 > 10 // false
let isPosition = true

undefined

Это специальное значение, обозначающее не присвоенное значение переменной.

Пример:


let a
console.log(a) // undefined

Можно присвоить значение переменной undefined, но не следует этого делать, т.к. JavaScript сделает это за нас.

null

Это специальный тип имеющий только одно значение и записывается литералом null. Данное значение обозначает отсутствие какого-либо значения, «значение неизвестно».

Можно явно указать, что значение переменной неизвестно.

Пример:


let foo = null

Symbol

Тип предназначен для создания уникального индификатора объекта. Для создания символа нужно вызвать функцию Symbol и передать в параметр ее описание.

Пример:


let uid = Symbol("uid")

При сравнении символов не происходит сравнение их описаний. Они всегда будут полностью уникальны.  Данный параметр больше нужен при дебаге кода.

Пример:


let uid = Symbol("uid")
let uid2 = Symbol("uid")
uid == uid2 // false

Object

Объект не относится к «примитивным» типам данных и предназначен для хранения более сложных коллекций и сущностей. JavaScript имеет два способа создания нового объекта: 

(1) Через конструктор

Пример:


let obj = new Object({ name: "Test" })

(2) Через литерал с использование фигурных скобок {}

Пример:


let obj = {
	name: "Test"
}

Объекты имеют свойства, которые обозначаются терминологией «ключ» и «значение».

В примере выше мы создали новый объект, содержащий свойства с ключом «name» и значением «Test».

Для получения значения свойства объекта нужно обратится к нему «через точку».

Пример:


console.log(obj.name) // "Test"

Чтобы переопределить свойство объекта или добавить новое, достаточно присвоить ему новое значение.

Пример:


let obj = {
	name: "Test"
}
obj.name = "Test2"
obj.year = 2020
// { name: "Test2", year: 2020 }

Для удаления свойства в объекте нужно использовать оператор delete.

Пример:


delete obj.name

Объекты появились в JavaScript (и других языках) благодаря концепции ООП и являются синтаксисом описания сущностей окружающей действительности.

typeof

Оператор typeof предназначен для определения типа значения переменной и при вызове возвращает результат в виде строки. 

Пример:


typeof 10 // "number"
typeof 10n // "bigint"
typeof 10.20 // "number"
typeof "Text" // "string"
typeof Symbol("uid") // "symbol"
typeof true // "boolean"
typeof undefined // "undefined"
typeof null // "object"
typeof {} // "object"
typeof []  // "object"
typeof function(){} // "function"

Наверное вы уже заметили, что из все типов typeof определяет null как object. На самом деле null имеет свой собственный тип. Это официально признанная ошибка typeof, оставленная в JavaScript для обратной совместимости.

Также typeof function(){} возвращает  «function». Такой тип отсутсвует в JavaScaript и «function» является объектным типом. Данная запись тоже не верна, но как показывает практика, она бывает очень удобна при написании кода (в случаях создания сложных проверок).

Сегодня мы рассмотрели все типы данных в JavaScript и на примерах разобрали их отличия и особенности. Надеюсь, что данный материал был вам полезен. Учитесь, думайте, пишите код. Удачного кодинга, друзья!

Полезные материалы:

https://learn.javascript.ru/types

https://developer.mozilla.org/ru/docs/Web/JavaScript/Data_structures

Подписывайтесь на наш канал в Telegram и на YouTube для получения самой последней и актуальной информации. 

Комментарии:

Учимся кодить на JavaScript. Типы данных.: 3 комментария

  1. Высокоуровневый. Он даёт программисту абстракции, которые позволяют не обращать внимание на особенности аппаратного обеспечения, на котором выполняются JavaScript-программы. Язык автоматически управляет памятью, используя сборщик мусора. Разработчик, в результате, может сосредоточиться на решении стоящих перед ним задач, не отвлекаясь на низкоуровневые механизмы (хотя, надо отметить, это не отменяет необходимости в рациональном использовании памяти). Язык предлагает мощные и удобные средства для работы с данными различных типов.

  2. Кириченко А. В. JavaScript для FrontEnd-разработчиков. Написание. Тестирование. Развертывание В книге последовательно затронуты все аспекты производства JavaScript-кода: от выбора архитектуры и конструирования кода до покрытия модульными тестами, отладки, интеграционного тестирования, сборки и непрерывной поставки вашего кода. #book Браун Итан. Веб-Разработка с применением Node и Express. Полноценное использование стека JavaScript Эта книга предназначена для программистов, желающих создавать веб-приложения (обычные сайты, воплощающие REST-интерфейсы программирования приложений или что-то среднее между ними) с использованием JavaScript, Node и Express. Для чтения книги вам не потребуется опыт работы с Node, однако необходим хотя бы небольшой опыт работы с JavaScript. #book

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *