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

Что такое тип данных?

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

Наши взаимодействия (входы и выходы) с программой на многих языках рассматриваются как поток байтов. Эти байты представляют данные, которые можно интерпретировать как представление значений, которые мы понимаем. Кроме того, в программе мы обрабатываем эти данные различными способами, например, добавляя или сортируя их. Эти данные поступают в разных формах. Примеры включают:

  • ваше имя - строка символов
  • ваш возраст - обычно целое число
  • сумма денег в вашем кармане - обычно сумма, измеряемая в вашей местной валюте.

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

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

Когда язык программирования требует, чтобы переменная использовалась только таким образом, чтобы уважать его тип данных, этот язык называется строго типизированным. Строго типизированный язык требует определения типа данных, а операция перекрестного типа требует приведения типа. Вот почему в строго типизированных языках, таких как; C, C ++, C #, Java, Python вы должны определить, какой тип значения будет содержать переменная, и, если некоторые типы не обладают высокой степенью совместимости, вам, скорее всего, потребуется преобразовать (преобразовать) один тип в другой, иначе вы закончите с исключением или, что еще хуже, неожиданным результатом операции. Это предотвращает ошибки, потому что, хотя логично просить компьютер добавить число с плавающей запятой к целому числу (1,5 + 5), нелогично просить компьютер добавить число с плавающей запятой к строке (1,5 + «ClarusWay»).

С другой стороны, когда язык программирования позволяет использовать переменную одного типа данных, как если бы она была значением другого типа данных, язык считается слабо (или слабо) типизированным. Язык со слабой типизацией не требует определения типа для переменных, и переменная может быть назначена и переназначена для другого типа данных, а диапазоны данных просто не имеют значения. Давайте перейдем к JavaScript здесь ...

Где подходит JavaScript?

Согласно MDN, JavaScript - это слабо типизированный и динамический язык. Поскольку JavaScript - это слабо типизированный язык; переменные в JavaScript не связаны напрямую с каким-либо конкретным типом значения. Как упоминалось выше, вам не нужно заранее указывать, какой тип информации будет храниться в переменной. JavaScript автоматически вводит переменную в зависимости от того, какую информацию вы ей присваиваете (например, '' или " " для обозначения строковых значений).

//variable declaration in JavaScript. Note that data types are not defined during the declaration. 
let x = 99;            // x is holding a number value
let city = 'Istanbul'; // city is holding a string value
let isExists = true;   // isExists is holding a boolean value

Кроме того, поскольку JavaScript - это динамический язык; любой переменной можно присвоить (и переназначить) значения всех типов. В JavaScript динамическая типизация тип переменной определяется ее значением после того, как код запускает код в компиляторе / интерпретаторе. Это означает, что если значение переменной является целым числом, тогда переменная будет целым числом, а если это строка, то тип переменной также будет строкой. Но тип данных, удерживаемый переменной, может измениться позже, когда ему будет присвоен другой тип значения типа данных.

let foo = 99;    // foo is now a number
foo     = 'Istanbul'; // foo is now a string
foo     = true;  // foo is now a boolean

Многие другие языки, например C #, требуют объявления типа переменной, например int, float, boolean или String.

// variable declaration in C#. Note that data types should explicitly defined during the declaration.
int x = 99;    
string city = 'Istanbul'; 
boolean isExists = true;  

Теперь слабо (слабо) типизированные и динамические функции JavaScript - это одновременно и благословение, и проклятие.

var a = 2 + '4'; 
console.log(a); //output: '24'
console.log('Istanbul' + 71) // output: Istanbul71
console.log(7 + 1 + 'Istanbul' + 71) //output: 8Istanbul71

Хотя система типов JavaScript дает вам большую гибкость, ей не хватает способности строго типизированной системы предупреждать вас, когда вы пытаетесь добавить int к объекту, что защищает вас от тратить часы на отладку ошибки типа.

Типы данных и структур JavaScript

Последний стандарт ECMAScript определяет девять типов:

Все типы, кроме объектов, определяют неизменяемые значения (то есть значения, которые нельзя изменить). Например (и в отличие от C), строки неизменяемы. Мы называем значения этих типов «примитивными значениями».

Примитивные типы данных:

неопределенный тип:

Переменная, которой не присвоено значение, имеет значение undefined. Тип также undefined. Если переменная объявлена, но не назначена, то ее значение будет undefined:

let city;    // Value is undefined, type is undefined

Любую переменную можно очистить, установив значение undefined. Тип также будет undefined.

country = undefined;    // Value is undefined, type is undefined

Логический тип:

Логическое значение представляет собой логическую сущность и может иметь два значения: true и false. Этот тип обычно используется для хранения значений «да / нет»: true означает «да, правильно», а false означает «нет, неверно». Логические значения лучше всего подходят для условного тестирования.

Тип строки:

Тип JavaScript String используется для представления текстовых данных. Строка (или текстовая строка) - это последовательность символов, например Курсы ClarusWay. Каждый элемент в строке занимает позицию в строке. Первый элемент имеет индекс 0, следующий - индекс 1 и так далее. Длина строки - это количество элементов в ней.

Строки заключаются в кавычки. В JavaScript есть 3 типа кавычек.

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

Двойные и одинарные кавычки - это «простые» кавычки. В JavaScript между ними практически нет разницы. С другой стороны, обратные кавычки - это кавычки «расширенной функциональности». Они позволяют нам вставлять переменные и выражения в строку, помещая их в ${…}, например:

let name = "ClarusWay";  
// embed a variable 
alert( `Hello, ${name}!` ); // Hello, ClarusWay! 
// embed an expression 
alert( `the result is ${98 + 1}` ); // the result is 99

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

Однако по-прежнему можно создать другую строку на основе операции с исходной строкой. Например:

  • Подстрока оригинала, выбирая отдельные буквы или используя String.substr().
  • Объединение двух строк с помощью оператора объединения (+) или String.concat().

В некоторых языках существует специальный тип «символа» для одного символа. Например, в C, C # и Java он называется char.

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

Тип числа:

ECMAScript имеет два встроенных числовых типа: Number и BigInt.

Тип Number - это значение двойной точности (числа от - (2⁵³ - 1) до 2⁵³ - 1). Числа можно писать с десятичными знаками или без них.

let x1 = 99.00;     // Written with decimals
let x2 = 99;        // Written without decimals

Помимо представления чисел с плавающей запятой, числовой тип имеет три так называемых специальных числовых значения: +Infinity, -Infinity и« NaN ('N или N умбра ').

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

Тип числа имеет только одно целое число с двумя представлениями: 0 представлено как -0 и +0. (0 - это псевдоним для +0.) +0 === -0 это true. Но вы можете заметить разницу, если разделите на ноль:

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

console.log( "not a number" / 2 ); // output: NaN, (because such division is erroneous)

NaN липкий. Любая дальнейшая операция с NaN возвращает NaN:

alert( "not a number" / 2 + 5 ); // NaN

Итак, если где-то в математическом выражении есть NaN, оно распространяется на весь результат.

Тип BigInt:

BigInt - это новый примитив, который обеспечивает способ представления целых чисел, превышающих 2 ^ 53, что является наибольшим числом, которое Javascript может надежно представить с помощью примитива Number.

const x = Number.MAX_SAFE_INTEGER;
// ↪ 9007199254740991, this is 1 less than 2^53

const y = x + 1;
// ↪ 9007199254740992, ok, checks out

const z = x + 2
// ↪ 9007199254740992, wait, that’s the same as above!

Тип BigInt - это числовой примитив в JavaScript, который может представлять целые числа с произвольной точностью. С BigInts вы можете безопасно хранить и обрабатывать большие целые числа даже сверх безопасного целочисленного предела для Number.

BigInt создается добавлением n в конец целого числа или вызовом конструктора.

console.log(9007199254740995n);    // → 9007199254740995n
BigInt("9007199254740995");    // → 9007199254740995n

Тип символа:

Символ - это уникальное и неизменное примитивное значение, которое может использоваться в качестве ключа свойства объекта. В некоторых языках программирования символы называются «атомами».

Структурный корневой примитив

null:

Значение null представляет преднамеренное отсутствие какого-либо значения объекта. Это одно из примитивных значений JavaScript и считается ложным для логических операций.

Тип Null имеет ровно одно значение: null. Специальное значение null не принадлежит ни к одному из типов, описанных выше. Он образует отдельный тип, содержащий только значение null:

let city = null;

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

Структурные типы данных

объекты:

В информатике объект - это значение в памяти, на которое, возможно, ссылается идентификатор. Объект JavaScript - это сопоставление между ключами и значениями. Объекты JavaScript записываются в фигурные скобки {}. Свойства объекта записываются в виде пар ключ: значение, разделенных запятыми. Ключи - это строки, а значения могут быть любыми.

const person = {
               firstName:"Adam", 
               lastName:"Eve", 
               age:50, 
               eyeColor:"brown"
            };

Объект (человек) в приведенном выше примере имеет 4 свойства: firstName, lastName, age и eyeColor.

функции:

Функции - это обычные объекты с дополнительной возможностью быть вызываемыми.

Оператор typeof

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

typeof undefined // "undefined"  
typeof 0 // "number"  
typeof 10n // "bigint"  
typeof true // "boolean"  
typeof "Istanbul" // "string"  
typeof Symbol("id") // "symbol"  
typeof Math // "object"  (*)  
typeof null // "object"  (*)  
typeof alert // "function"  (*)

Последние три строки могут потребовать дополнительных пояснений:

  • Math - это встроенный объект, который предоставляет математические операции. Он служит просто примером объекта.
  • Результат typeof null - "object". Это официально признанная ошибка в поведении typeof, возникшая с первых дней разработки JavaScript и сохраненная для совместимости. Определенно null не объект. Это особое значение с отдельным типом.
  • Результат typeof alert - "function", потому что alert - это функция. Функции относятся к объектному типу. Но typeof относится к ним иначе, возвращая "function". Это также происходит из первых дней JavaScript. Технически такое поведение некорректно, но на практике может быть удобно.

Заключение

Все языки программирования имеют встроенные структуры данных, но они часто отличаются от одного языка к другому. В этой статье мы рассмотрели типы данных и структуры данных в JavaScript. Согласно официальной документации MDN, всего 9 типов данных.

JavaScript - один из самых популярных языков программирования. Это язык программирования Интернета. Кривая обучения может быть легкой вначале, но требует внимания по мере того, как вы начинаете писать код. Есть дополнительные сведения о «undefined» и «null», которые имеют настраиваемые свойства, встроенные в JavaScript. Планирую написать следующую статью на эту тему. А пока, счастливые товарищи по кодированию ..