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

1. Переменные

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

1.1. Имена переменных

Идентификатор — это имя переменной, функции, параметра или класса. Состоит из одного или нескольких символов в следующем формате:

  • Первым символом должна быть буква a-z или A-Z, символ подчеркивания _ или знак доллара $.

  • Другие символы могут быть буквами a-z, A-Z, цифрами 0-9, подчеркиваниями _ и знаками доллара $.

  • Все идентификаторы чувствительны к регистру. Это значит, что переменные user, usEr и User различны.

Имя переменной должно быть понятным.

❌ Плохо
chislo korzina_tovarov profil_polzovatelya tekushiy_mesyaz

✅ Хорошо
number cart userProfile currentMonth

Использование camelCase-нотации для идентификаторов это стандарт. При таком подходе, первое слово пишется строчными буквами, а каждое дополнительное начинается с прописной буквы. К примеру: user, greetUser, getUserData, isActive, activeGuestCount, totalWorkerSalary.

1.2. Ключевые слова

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

Таблица зарезервированных слов

1.3. Объявление переменных

В современном JavaScript есть 2 ключевых слова для объявления переменных.

  • let — объявляет переменную, которой можно присвоить новое значение после объявления, то есть переопределить.

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

/*
 * Для объявления переменной используются ключевые слова let и const,
 * за которыми следует имя переменной.
 * Переменным объявленным через let не обязательно сразу присваивать значение.
 */
let age;

/*
 * Переменные объявленные как const обязательно должны быть инициализированы
 * значением во время объявления, иначе будет ошибка.
 */
const yearOfBirth = 2006;

/*
 * Значение переменной можно получить обратившись к ней по имени.
 * console.log() используется для вывода данных в консоль разработчика,
 * с этим методом более детально познакомимся позже.
 */
console.log(yearOfBirth); // 15

/*
 * Если переменной объявленной как let, изначально не присвоено значение,
 * она инициализируется специальным значением undefined (не определено).
 */
console.log(age); // undefined

/*
 * Если переменная объявлена как let, ее значение можно перезаписать.
 */
age = 14;
console.log(age); // 14

/*
 * Если переменная объявлена как const, перезаписать ее значение нельзя.
 * При попытке присвоить новое значение будешь ошибка выполнения скрипта.
 */

yearOfBirth = 2020; // будет ошибка

1.4. Когда использовать const и let

Единственное отличие const и let состоит в том, что const запрещает повторное присваивание переменной какого-либо значения. Объявление const делает код более читаемым, так как переменная всегда ссылается на одно и то же значение. В случае с let такой уверенности нет.

Будет разумно использовать let и const так:

  • Используйте const по умолчанию, большинство переменных будут объявлены именно так.

  • Используйте let, если потребуется присвоить переменной другое значение во время выполнения скрипта.

1.5. константы и КОНСТАНТЫ

Имена КОНСТАНТ - переменных, значение которых не изменяется никогда на протяжении работы всего скрипта, обычно записываются в формате UPPER_SNAKE_CASE.

// Константа хранящая значение цвета
const COLOR_TEAL = '#009688';

// Константа хранящая сообщение о авторизации
const MESSAGE_LOGIN_SUCCESS = 'Добро пожаловать!';

Абсолютное большинство переменных – константы в другом смысле, они просто не изменяют значение после присвоения. Но при разных запусках скрипта, это значение может быть разным. Имена таких переменных записывают используя формат camelCase.

1.6. Обращение к переменной

Важно различать неопределенные и необъявленные переменные.

  • Неопределенная (undefined) — это переменная, которая была объявлена, но не инициализирована значением, по умолчанию ей присваивается значение undefined как начальное.

  • Необъявленная (undeclared или not defined) — это переменная, которая не была объявлена в доступной области видимости.

let name;

/*
 * Переменная name объявлена, но не инициализирована, поэтому
 * ее значение undefined (не определено), тогда как переменная age
 * не была объявлена, поэтому доступ к ней вызывает ошибку ReferenceError
 */
console.log(name); // undefined
console.log(age); // ReferenceError: age is not defined

Попытка обратиться к пременной до ее объявления вызовет ошибку.

// console.log(a); // ReferenceError: a is not defined
let a = 10;
console.log(a); // 10

// console.log(b); // ReferenceError: b is not defined
const b = 15;
console.log(b); //15

2. Типы примитивов

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

2.1. Number

Целые числа и числа с плавающей запятой. После объявления переменной, можно инициализировать ее числовым значением.

const age = 20;
const number = 5.8;

2.2. String

Строки - это просто текст, последовательность из нуля или более символов. Строка начинается и заканчивается одиночной ' или двойными кавычками ". Открывающая и закрывающая кавычки должны быть одинаковые.

const name = 'Mango';

2.3. Boolean

Логический тип данных, флаги состояния. Имеет только два значения: true и false, в нижнем регистре. Например на вопрос включен ли свет в комнате можно ответить да (true) или нет (false).

  • true — да, верно, истина, 1

  • false — нет, неверно, ложь, 0

Обратите внимание на имена переменных содержащих буль. Они задают вопрос, и ответ на его — да или нет.

const isAuthenticated = true;
const canMerge = false;
const hasChildren = true;
const isModalOpen = false;

2.4. null

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

// Переменная guest пуста и лишена значения
const guest = null;

2.5. undefined

Еще одно специальное значение. По умолчанию, когда переменная объявляется, но не инициализируется, ее значение не определено, ей присваивается undefined.

let name;
console.log(name); // undefined

2.6. Оператор typeof

Для получения типа значения переменной, используется оператор typeof, который возвращает на место своего вызова тип значения переменной указанного после него. Возвращаемое значение это просто строка в которой указан тип.

// undefined
let a;
console.log(typeof a); // "undefined"

// null
const b = null;
console.log(typeof null); // "object"

// Number
const c = 5;
console.log(typeof c); // "number"

// String
const d = 'JavaScript is awesome!';
console.log(typeof d); // "string"

// Boolean
const e = false;
console.log(typeof e); // "boolean"

Last updated