Типы данных

Типы данных

Coursme
25 мин.
22 дек. 2023

В предыдущем уроке мы углубились в понимание двух из восьми основных типов данных – Undefined и null. Теперь, имея некоторое представление об этих концепциях, давайте исследовать остальные шесть типов данных и их роли в создании гибких и мощных программ.

Типы данных в JavaScript – это не просто средства для хранения информации. Они представляют собой стройные инструменты, позволяющие программистам эффективно работать с данными и реализовывать различные задачи. В этом уроке мы рассмотрим числовой тип данных, строки, булевы значения и даже заглянем в захватывающий мир BigInt, который дает возможность оперировать гигантскими целыми числами.

Числовой тип данных

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

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

Infinity обозначает математическую бесконечность (∞). Это значение, превосходящее любое обычное число, может быть получено при делении на ноль:

alert(1 / 0); // Infinity

Также можно явно установить значение Infinity:

alert(Infinity); // Infinity

NaN представляет собой результат вычислительной ошибки, такой как деление на строку, не являющуюся числом:

alert("не число" / 2); // NaN

Значение NaN "заразительно": любая математическая операция с участием NaN возвращает NaN:

alert(NaN + 1); // NaN
alert(3 * NaN); // NaN
alert("не число" / 2 - 1); // NaN

Даже если NaN появляется где-то в математическом выражении, оно распространяется на весь результат (за исключением случая NaN ** 0, который равен 1).

Важно отметить, что математические операции в JavaScript считаются "безопасными". В случае ошибок, таких как деление на ноль или обработка нечисловых строк, скрипт не приведет к фатальной ошибке, а в худшем случае вернет NaN.

Специальные числовые значения являются неотъемлемой частью типа "число" в JavaScript, предоставляя интересные возможности для обработки различных сценариев. Подробнее о работе с числами мы рассмотрим в следующей главе "Числа".

BigInt

В мире JavaScript тип данных number, хоть и мощный, оказывается неспособным безопасно оперировать с числами, выходящими за пределы диапазона ±(2^53-1) или, иными словами, 9007199254740991.

Технически, number может хранить большие целые числа до 1.7976931348623157 * 10^308, но за пределами безопасного диапазона возникают ошибки точности из-за ограничений 64-битной памяти.

Пример иллюстрирует эту проблему:

console.log(9007199254740991 + 1); // 9007199254740992
console.log(9007199254740991 + 2); // 9007199254740992

Замечено, что все нечетные целые числа, превосходящие (2^53-1), не могут быть корректно представлены в типе number.

Хотя в большинстве случаев диапазон (2^53-1) до -(2^53-1) достаточен, иногда нам нужно оперировать гигантскими целыми числами без ограничений. Это может быть необходимо, например, в криптографии или при работе с временными метками (timestamp) в микросекундах.

Чтобы решить эту проблему, был добавлен тип BigInt в JavaScript, который позволяет работать с целыми числами произвольной длины. Создать BigInt можно, добавив суффикс "n" к числовому литералу:

const bigInt = 1234567890123456789012345678901234567890n;

Имейте в виду, что на момент написания текста BigInt поддерживается браузерами Firefox, Chrome, Edge и Safari, но не поддерживается в Internet Explorer.

Строки

В языке программирования JavaScript строки (string) представляют собой текст и должны быть заключены в кавычки. Вот несколько способов определения строк:

let str = "Привет";
let str2 = 'Одинарные кавычки тоже подойдут';
let phrase = `Обратные кавычки позволяют встраивать переменные ${str}`;

В JavaScript используются три типа кавычек:

  • Двойные кавычки: "Привет".
  • Одинарные кавычки: 'Привет'.
  • Обратные кавычки: Привет.

Двойные и одинарные кавычки считаются "простыми" и между ними нет разницы в JavaScript.

Обратные кавычки обладают расширенной функциональностью. Они позволяют встраивать выражения в строку, заключая их в ${...}. Пример:

let name = "Леха.П";
// Вставим переменную
alert( `Привет, ${name}!` ); // Леха.П!
// Вставим выражение
alert( `результат: ${2 + 2}` ); // результат:4 

Выражение внутри ${...} вычисляется, и его результат становится частью строки. В этот блок можно помещать любые выражения, будь то переменная name, вычисление 1 + 2, или что-то более сложное.

Важно отметить, что возможность встраивания выражений присуща только обратным кавычкам, остальные кавычки не обладают подобной функциональностью:

alert( "результат: ${1 + 2}" ); // результат: ${1 + 2} (двойные кавычки не выполняют встраивание)

Также стоит отметить, что в JavaScript нет отдельного типа данных для хранения одного символа, как, например, в языках C и Java. Вместо этого используется тип string, который может содержать ноль, один или множество символов.

Булевый тип данных

В языке программирования JavaScript существует булевый тип данных (boolean), который может принимать только два значения: true (истина) и false (ложь).

Этот тип данных обычно применяется для хранения ответов на вопросы типа "да/нет": true означает "да" или "правда", а false означает "нет" или "ложь".

Примеры использования булевых значений:

let nameFieldChecked = true; // да, поле отмечено
let ageFieldChecked = false; // нет, поле не отмечено

Булевые значения также могут быть результатом сравнений. Например:

let isGreater = 88 > 14;
alert(isGreater); // true (результат сравнения: "да")

Подробное рассмотрение работы с булевыми значениями мы проведем в главе о логических операторах.

Объекты

В мире JavaScript тип данных object представляет собой категорию особого рода. В отличие от прочих типов, названных "примитивными", объекты предназначены для хранения коллекций данных или более сложных структур, вмещая в себя разнообразные значения.

Важно отметить, что примитивные типы данных (строки, числа и другие) могут хранить только простые значения, в то время как объекты способны охватывать более сложные структуры данных.

Более подробно мы изучим объекты в отдельном разделе “Объекты”

Оператор typeof

Оператор typeof предназначен для определения типа переданного аргумента. Это полезно, когда требуется обрабатывать значения различных типов по-разному или проводить проверки.

У оператора typeof существует две синтаксические формы:

// Обычный синтаксис
typeof 14 // Вернет "number"
// Синтаксис, напоминающий вызов функции (реже используется)
typeof(14) // Также вернет "number"

Если передается выражение, то необходимо заключить его в скобки, так как оператор typeof имеет более высокий приоритет, чем бинарные операторы:


typeof 50 + " Квартир"; // Вернет "number Квартир"
typeof (50 + " Квартир"); // Вернет "string"

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

Вызов typeof x возвращает строку с именем типа:

typeof undefined // "undefined"
typeof 0 // "number"
typeof 10n // "bigint"
typeof true // "boolean"
typeof "foo" // "string"
typeof Symbol("id") // "symbol"
typeof Math // "object"  (1)
typeof null // "object"  (2)
typeof alert // "function"  (3)

Давайте разберем парчку моментов

Math — встроенный объект, предоставляющий математические операции и константы.

Результат вызова typeof null — "object". Это признанная ошибка, сохраненная для совместимости. Фактически null не является объектом, а представляет собой специальное значение с отдельным типом.

Вызов typeof alert возвращает "function", потому что alert является функцией. В JavaScript нет отдельного типа "function", поэтому функции относятся к объектному типу, но оператор typeof обрабатывает их особым образом, возвращая "function".

Заключение

В языке программирования JavaScript выделяется восемь основных типов данных. Семь из них относятся к примитивным типам данных, включая number для чисел, bigint для целых чисел произвольной длины, string для строк, boolean для логических значений, null для представления неизвестных значений, undefined для обозначения неприсвоенных значений, и symbol для создания уникальных идентификаторов. Ещё один тип, object, выделяется как не примитивный и используется для создания более сложных структур данных.

Оператор typeof предоставляет средство для определения типа данных, сохранённого в переменной, возвращая строку с именем соответствующего типа. Однако стоит отметить, что для значения null возвращается "object", что является ошибкой в языке, поскольку null на самом деле не является объектом.

Назад
Следующий тест
Комментарии
Чтобы оставлять комментарии — надо авторизоваться
Комментариев еще нет
Будьте первым
Главная
Статьи и курсы
Меню