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