Типы данных, константы и переменные в JavaScript. Типы данных в JavaScript

Типы и структуры данных. Основы.

Далее мы будем использовать оператор typeof, чтобы разобраться с типами.

Есть ли типы в JS?

Кто-то может сказать, что JS не типизированный язык или что его типы нельзя назвать системными типами. От вас не требуется объявлять тип при создании переменной, как в других строго типизированных языках, например int x = 10. Я же (как и JS специалисты) заявляю, что в JS есть типы.

JS можно назвать и динамически типизированным и слабо типизированным.

Статическая типизация

JS не является статически типизированным языком, если только вы не используете такие инструменты как Typescript или Flow, которые компилируют в JS код. Мы коснёмся этой темы для примера.

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

Динамическая типизация

Языки с динамической типизацией допускают изменение типа во время рабочего цикла. Это значит, что запустив выполнение кода, компилятор/интерпретатор, увидев переменную и её значение, сам определит тип данных. В этом случае, тип также принудительно задан, просто JS сам определяет его.

Слабая типизация

Слабо типизированные языки допускают изменение типа. Например: 1 + ‘2’ // ’12’ . JS видит, что вы пытаетесь сложить число и строку (недопустимая операция), в результате он преобразует число в строку и возвращает ‘12’.

Примитивы

Эти шесть типов задуманы как примитивы. Они не являются объектами и не имеют собственных методов. Все примитивы неизменны.

  • Boolean — true or false
  • Null — нет значения
  • Undefined — объявленная переменная, но без значения
  • Number — целочисленные, с плавающей точкой и т.д.
  • String —строка
  • Symbol — уникальное значение, которое не совпадает с другими

Всё остальное это объекты.

Типы данных, константы и переменные в JavaScript. Типы данных в JavaScript
Основы примитивов

Определение типа данных

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

Далее, коротко рассмотрим все существующие типы данных в JavaScript.

Оператор typeof

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

Подробно об использовании typeof и типах переменных в Javascript

  1. Javascript тип переменных число
  2. Строку умножить на число -> какой тип переменной
  3. Тип переменной -> число разделить на ноль
  4. Javascript тип переменных строка «string»
  5. Тип специальное значение «undefined» и «null»
  6. Булевый (логический) тип «boolean»
  7. Тип объекты «object»

Javascript тип переменных число

Мы уже говорили, что переменную можно объявлять без «var» Тип число – будет одинаковым и для целого и дробного числа.

Для вывода информации о типе переменных в javascript используется оператор «typeof», для иллюстрации типа числа создадим переменную и выведем его тип. Переменной присвоим typeof + число. Здесь обращаю ваше внимание, что можно не использовать скобки

Javascript строку умножить на число -> какой тип переменной

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

К примеру, если умножить строку на число…, то какой тип переменной будет выводить typeof

Число «number»

var n = 123; n = 12.345;

Единый тип число используется как для целых, так и для дробных чисел.

Существуют специальные числовые значения Infinity (бесконечность) и NaN (ошибка вычислений).

Например, бесконечность Infinity получается при делении на ноль:

alert( 1 / 0 ); // Infinity

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

alert( «нечисло» * 2 ); // NaN, ошибка

Эти значения формально принадлежат типу «число», хотя, конечно, числами в их обычном понимании не являются.

Особенности работы с числами в JavaScript разобраны в главе Числа.

Число «bigint»

В JavaScript тип «number» не может содержать числа больше, чем 253 (или меньше, чем -253 для отрицательных). Это техническое ограничение вызвано их внутренним представлением. 253 – это достаточно большое число, состоящее из 16 цифр, поэтому чаще всего проблем не возникает. Но иногда нам нужны действительно гигантские числа, например в криптографии или при использовании метки времени («timestamp») с микросекундами.

Тип BigInt был добавлен в JavaScript, чтобы дать возможность работать с целыми числами произвольной длины.

Чтобы создать значение типа BigInt, необходимо добавить n в конец числового литерала:

// символ «n» в конце означает, что это BigInt const bigInt = 1234567890123456789012345678901234567890n;

Более подробно тип данных BigInt мы рассмотрим в отдельной главе BigInt.

Булевый (логический) тип «boolean»

У него всего два значения: true (истина) и false (ложь).

Как правило, такой тип используется для хранения значения типа да/нет, например:

var checked = true; // поле формы помечено галочкой checked = false; // поле формы не содержит галочки

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

Символы «symbol»

«Символ» представляет собой уникальный идентификатор.

Создаются новые символы с помощью функции Symbol():

// Создаём новый символ — id let id = Symbol();

При создании символу можно дать описание (также называемое имя), в основном использующееся для отладки кода:

// Создаём символ id с описанием (именем) «id» let id = Symbol(«id»);

Символы гарантированно уникальны. Даже если мы создадим множество символов с одинаковым описанием, это всё равно будут разные символы. Описание – это просто метка, которая ни на что не влияет.

Например, вот два символа с одинаковым описанием – но они не равны:

let id1 = Symbol(«id»); let id2 = Symbol(«id»); alert(id1 == id2); // false

Более подробно c символами мы познакомимся в главе Тип данных Symbol.

Объекты «object»

Первые 7 типов называют «примитивными».

Особняком стоит восьмой тип: «объекты».

Он используется для коллекций данных и для объявления более сложных сущностей.

Объявляются объекты при помощи фигурных скобок {…}, например:

var user = { name: «Вася» };

Тип данных Array (массив)

Массив — это тип объекта, используемый для хранения нескольких значений в одной переменной. Каждое значение (также называемое элементом массива) имеет числовой индекс, и оно может содержать данные любых типов данных: числа, строки, логические значения, функции, объекты и даже другие массивы. Индекс массива начинается с 0, поэтому первый элемент массива — это arr[0], а не arr[1].

Самый простой способ создать массив — указать элементы массива в виде списка через запятую, заключенного в квадратные скобки, как показано в примере ниже:

var colors = [«Red», «Green», «Blue»]; var cities = [«Moscow», «London», «Paris», «New York»]; alert(colors[0]); // Результат: Red alert(cities[2]); // Результат: Paris

Тип данных Function (функция)

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

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

Простые типы данных

  

Числа

Число представляет собой последовательность цифр, которая находится в промежутке от 5e-324 (минимальное значение числа) до 1.7976931348623157e+308 (максимальное значение числа). Любое число меньшее чем 5e-324, автоматически преобразуется в число — 0 (нуль) (для отрицательных чисел в -0), а число большее чем 1.7976931348623157e+308 преобразуется в значение — Infinity (бесконечность) (для отрицательных чисел в -Infinity).

JavaScript не представляет отдельных типов данных для чисел (integer, float, double, long interger, …), как например, это делают другие языки программирования (C++, Java). Все числа в Javascript представлены в виде одного единственного типа данных — number с размерностью 64 бит и всегда представляет из себя число с плавающей точкой (десятичная дробь).

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

Также значения числа может быть записано в экспоненциальной форме.

Далее даны несколько примеров чисел в JavaScript.

<текстареа class=»crayon-plain print-no» data-settings=»dblclick» readonly=»» style=»-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 14px !important; line-height: 18px !important;»> var year = 1993, // целое число   price = 45.88, // десятичное число (с плавующей точкой)   bigNum = 3e12, // число с экспонентой — 3000000000000   hexNum = 0xff, // число в шестнадцатеричное системе счисления — 255   octNum = 055;  // число в восьмеричной  системе счисления — 45 // Проверка типа данных каждой из переменных typeof year;   // => number typeof price;  // => number typeof bigNum; // => number typeof hexNum; // => number typeof octNum; // => number

123456789101112 varyear=1993,// целое число   price=45.88,// десятичное число (с плавующей точкой) bigNum=3e12,// число с экспонентой — 3000000000000 hexNum=0xff,// число в шестнадцатеричное системе счисления — 255 octNum=055; // число в восьмеричной  системе счисления — 45 // Проверка типа данных каждой из переменныхtypeof year; // => numbertypeof price; // => numbertypeof bigNum;// => numbertypeof hexNum; // => numbertypeof octNum;// => number

Строки

Строкой в JavaScript называют любую последовательность символов, которая находится между двойными кавычками — «», одинарными кавычками  — »,  либо наклонными кавычками — . Каждый из видов кавычек абсолютно идентичны между собой, и выбор, какие кавычки  использовать, остается лишь вопросом вкуса и удобства, в отличии, например от языка PHP, где каждый из видов кавычек имеет дополнительную функциональность.

Для того чтобы использовать в строке слова, которые находятся в кавычках, нужно лишь использовать разные типы кавычек, например:  ‘»Строки» в JavaScript’, или экранировать их с помощью символа — , например: «»Строки» в JavaScript».

Ниже представлено несколько примеров значений строкового типа.

<текстареа class=»crayon-plain print-no» data-settings=»dblclick» readonly=»» style=»-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 14px !important; line-height: 18px !important;»> var lang = «JavaScript»,     // строка в двойных кавычках   creator = ‘Brendan Eich’, // строка в одинарных кавычках   standart = `ECMAScript`, // строка в обратных кавычках   htmlBlock = »

text 12345678910 varlang=»JavaScript»,    // строка в двойных кавычках    creator=’Brendan Eich’,// строка в одинарных кавычках    standart=`ECMAScript`,  // строка в обратных кавычках    htmlBlock=»
text

Логический тип данных

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

Null и Undefined

Null и Undefined — это типы данных, которые говорят об отсутствии каких-либо значений вовсе. Undefined в отличии от null говорит об отсутствии значений на более высоком уровне.

Значение undefiend автоматически присваивается любой не инициализированной переменной, несуществующему элементу массива или свойству объекта, а также при отсутствии параметра в функции, когда она ожидает его получить при вызове и, если функция не возвращает никакого значения, то она
возвращает undefined.

Значения null и undefined не могут быть преобразованы ни к каким другим типам данных. В виду этого они не могут пройти проверку на истинность значений только если они не равны сами себе.

У null и undefined нет объектов-оберток, поэтому при вызове каких либо методов из этих значений Вы получите ошибку TypeError.

Тот факт, что оператор typeof для типа null возвращает тип данных object, является известной всем ошибкой в языке JavaScript. С выпуском новых спецификаций ECMAScript эту ошибку нарочно не исправляют, просто потому, что ее исправление заденет все ныне созданные проекты на JavaScript, и приведет их к нерабочему состоянию. На текущий момент, остается лишь принимать эту ошибку как данность.

Как настроить проверку типов

Как отмечалось выше, это можно сделать на уровне файла, глобально для всех проектов и для отдельного проекта. Рассмотрим эти способы подробнее.

Проверка типов на уровне файла

Если вы работаете в Visual Studio Code, линтинг типов можно включить несколькими способами. Самый простой — добавить в начале файла такой комментарий:

// @ts-check

Проверка типов для всех проектов

Если не хотите каждый раз добавлять комментарии в файлы, включите проверку в редакторе. Найдите в настройках пункт Check JS и отметьте его галочкой.

Так вы включаете линтинг типов для любого файла с кодом JavaScript, который редактируете.

Проверка типов для конкретного проекта

Если не хотите включать проверку типов для всех проектов по умолчанию, ограничьтесь конкретным проектом. Соответствующие настройки надо указать в файле settings.json. Сначала создайте директорию .vscode в корне проекта. В этой директории создайте файл settings.json, в котором включите проверку типов:

{«javascript.implicitProjectConfig.checkJs»:true}

Третий способ предпочтительный, так как с его помощью можно включить линтинг типов во всех файлах JavaScript в выбранном проекте. Чтобы отключить проверку типов в каком-либо файле, например, в файлах, созданных Gulp или другими сборщиками, просто добавьте в начале файла комментарий:

// @ts-nocheck

Источники

  • https://nuancesprog.ru/p/2240/
  • https://meliorem.ru/frontend/javascript/tipy-dannyx-v-javascript/
  • https://dwweb.ru/page/js/005_javascript_tipyi_dannyih.html
  • https://learn.javascript.ru/types-intro
  • https://programfiles.info/javascript/tipy-dannyh-v-javascript/
  • https://ru.hexlet.io/blog/posts/javascript-type-linting

Изучаем регулярные выражения: руководство для начинающих. Примеры регулярных выражений
Преимущества языка программирования Java. Где используется Java и зачем нужна?

ITandLife.ru