Logo
Книга для начинающих
ВходРегистрация
/
Программирование
/
Курс JavaScript
/

Что такое переменная

JavaScript: Что такое переменная

Представьте, что нужно вывести фразу Father! два раза:

console.log('Father!');
console.log('Father!');

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

А что будет, если фразу нужно изменить, например заменить Father! на Mother!? Придётся искать и исправлять все вхождения вручную. Это неудобно и приводит к ошибкам.

Переменные

Чтобы не дублировать одну и ту же строку, её можно сохранить в переменной и выводить её содержимое:

const greeting = 'Father!';

console.log(greeting);
console.log(greeting);

Результат:

Father!
Father!

Переменная представляет собой имя, за которым хранится значение. В нашем примере мы создали переменную с именем greeting и записали в неё строку 'Father!'.

const greeting = 'Father!';

Переменная       Значение
┌──────────┐     ┌──────────┐
│ greeting │ ──→ │ 'Father!'│
└──────────┘     └──────────┘

Строчка const greeting = 'Father!' читается так: «возьми значение 'Father!' и присвой его переменной с именем greeting». Знак = здесь является оператором присваивания, а не обозначением равенства как в математике. Он кладёт значение в переменную.

Когда мы пишем console.log(greeting), движок подставляет вместо имени greeting то значение, которое в ней хранится. В результате на экран выводится строка 'Father!'.

console.log(greeting)
            |
            v
console.log('Father!')

let и const

В JavaScript переменную перед использованием нужно объявить с помощью одного из ключевых слов — const или let:

  • const — для значений, которые не будут меняться;
  • let — для значений, которые в ходе работы программы могут поменяться.
const greeting = 'Father!'; // меняться не будет
let score = 0;              // будет меняться по ходу программы

Если не знаете, будет ли значение меняться, используйте const. Это хорошая практика: так код проще читать и сложнее случайно испортить данные. К let и константам мы ещё вернёмся в отдельных уроках.

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

Имена переменных придумывает сам программист. В JavaScript можно использовать:

  • латинские буквы (a-z, A-Z),
  • цифры (но не в начале),
  • символы _ и $.

Примеры допустимых имён: greeting, name1, helloWorld. JavaScript различает строчные и заглавные буквы. Переменные greeting, Greeting и GREETING являются тремя разными переменными.

Переменные и литералы

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

const greeting = 'Mother!';
console.log(greeting);   // => Mother!
console.log('greeting'); // => greeting

В первом случае используется переменная greeting, и программа подставляет её значение. Во втором случае 'greeting' заключено в кавычки, поэтому это строковый литерал, то есть готовое значение, написанное прямо в коде. Несмотря на то, что мы видим слово greeting в обоих случаях, с точки зрения движка это абсолютно разные вещи.

Литералы представляют собой данные, записанные явно (например, 'Hello', 42, 3.14). Идентификаторы являются именами переменных и функций (например, greeting, console), которые указывают на уже существующие значения или команды.

Порядок использования

Переменную нужно сначала создать (объявить и присвоить ей значение), а уже потом использовать. Если попытаться обратиться к переменной до её создания, программа выдаст ошибку:

console.log(name); // Ошибка: переменная ещё не определена
// ReferenceError: Cannot access 'name' before initialization
const name = 'Alice';

А в правильном порядке всё работает:

const name = 'Alice';
console.log(name); // => Alice

Несколько переменных в программе

В одной программе можно создать сколько угодно переменных. Каждая хранит свои данные и не мешает другим:

const greeting1 = 'Father!';
console.log(greeting1);
console.log(greeting1);

const greeting2 = 'Mother!';
console.log(greeting2);
console.log(greeting2);

Как понять, когда нужно несколько переменных? Количество переменных зависит от логики программы. Эта тема подробно раскрывается позже, когда мы столкнёмся с функциями и условными конструкциями.

Где создавать переменные

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

Ошибки при работе с переменными

Порядок следования инструкций в коде с переменными играет огромное значение. Переменная должна быть определена до того, как будет использована. Ниже пример ошибки, которую очень часто допускают новички:

// Uncaught ReferenceError: greeting is not defined
console.log(greeting);
let greeting = 'Father!';

Запуск программы с кодом из примера выше завершается ошибкой ReferenceError: greeting is not defined. ReferenceError — это ошибка обращения. Она означает, что в коде используется имя (идентификатор), которое не определено. В самом сообщении об этом говорят прямо: greeting is not defined — «greeting не определён».

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

Ещё одна распространённая ошибка — попытаться объявить уже объявленную переменную с помощью let:

let greeting = 'Father!';
let greeting = 'Father!'; // SyntaxError: Identifier 'greeting' has already been declared

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

Задание

Создайте переменную с именем url и значением https://hexlet.io. Выведите значение этой переменной на экран два раза.

Коммерческий опыт и Трудоустройство

Полезное

  • let

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "ИИ-помощник":

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

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

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

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются
/
Программирование
/
Курс JavaScript
/

Что такое переменная

JavaScript: Что такое переменная

Представьте, что нужно вывести фразу Father! два раза:

console.log('Father!');
console.log('Father!');

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

А что будет, если фразу нужно изменить, например заменить Father! на Mother!? Придётся искать и исправлять все вхождения вручную. Это неудобно и приводит к ошибкам.

Переменные

Чтобы не дублировать одну и ту же строку, её можно сохранить в переменной и выводить её содержимое:

const greeting = 'Father!';

console.log(greeting);
console.log(greeting);

Результат:

Father!
Father!

Переменная представляет собой имя, за которым хранится значение. В нашем примере мы создали переменную с именем greeting и записали в неё строку 'Father!'.

const greeting = 'Father!';

Переменная       Значение
┌──────────┐     ┌──────────┐
│ greeting │ ──→ │ 'Father!'│
└──────────┘     └──────────┘

Строчка const greeting = 'Father!' читается так: «возьми значение 'Father!' и присвой его переменной с именем greeting». Знак = здесь является оператором присваивания, а не обозначением равенства как в математике. Он кладёт значение в переменную.

Когда мы пишем console.log(greeting), движок подставляет вместо имени greeting то значение, которое в ней хранится. В результате на экран выводится строка 'Father!'.

console.log(greeting)
            |
            v
console.log('Father!')

let и const

В JavaScript переменную перед использованием нужно объявить с помощью одного из ключевых слов — const или let:

  • const — для значений, которые не будут меняться;
  • let — для значений, которые в ходе работы программы могут поменяться.
const greeting = 'Father!'; // меняться не будет
let score = 0;              // будет меняться по ходу программы

Если не знаете, будет ли значение меняться, используйте const. Это хорошая практика: так код проще читать и сложнее случайно испортить данные. К let и константам мы ещё вернёмся в отдельных уроках.

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

Имена переменных придумывает сам программист. В JavaScript можно использовать:

  • латинские буквы (a-z, A-Z),
  • цифры (но не в начале),
  • символы _ и $.

Примеры допустимых имён: greeting, name1, helloWorld. JavaScript различает строчные и заглавные буквы. Переменные greeting, Greeting и GREETING являются тремя разными переменными.

Переменные и литералы

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

const greeting = 'Mother!';
console.log(greeting);   // => Mother!
console.log('greeting'); // => greeting

В первом случае используется переменная greeting, и программа подставляет её значение. Во втором случае 'greeting' заключено в кавычки, поэтому это строковый литерал, то есть готовое значение, написанное прямо в коде. Несмотря на то, что мы видим слово greeting в обоих случаях, с точки зрения движка это абсолютно разные вещи.

Литералы представляют собой данные, записанные явно (например, 'Hello', 42, 3.14). Идентификаторы являются именами переменных и функций (например, greeting, console), которые указывают на уже существующие значения или команды.

Порядок использования

Переменную нужно сначала создать (объявить и присвоить ей значение), а уже потом использовать. Если попытаться обратиться к переменной до её создания, программа выдаст ошибку:

console.log(name); // Ошибка: переменная ещё не определена
// ReferenceError: Cannot access 'name' before initialization
const name = 'Alice';

А в правильном порядке всё работает:

const name = 'Alice';
console.log(name); // => Alice

Несколько переменных в программе

В одной программе можно создать сколько угодно переменных. Каждая хранит свои данные и не мешает другим:

const greeting1 = 'Father!';
console.log(greeting1);
console.log(greeting1);

const greeting2 = 'Mother!';
console.log(greeting2);
console.log(greeting2);

Как понять, когда нужно несколько переменных? Количество переменных зависит от логики программы. Эта тема подробно раскрывается позже, когда мы столкнёмся с функциями и условными конструкциями.

Где создавать переменные

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

Ошибки при работе с переменными

Порядок следования инструкций в коде с переменными играет огромное значение. Переменная должна быть определена до того, как будет использована. Ниже пример ошибки, которую очень часто допускают новички:

// Uncaught ReferenceError: greeting is not defined
console.log(greeting);
let greeting = 'Father!';

Запуск программы с кодом из примера выше завершается ошибкой ReferenceError: greeting is not defined. ReferenceError — это ошибка обращения. Она означает, что в коде используется имя (идентификатор), которое не определено. В самом сообщении об этом говорят прямо: greeting is not defined — «greeting не определён».

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

Ещё одна распространённая ошибка — попытаться объявить уже объявленную переменную с помощью let:

let greeting = 'Father!';
let greeting = 'Father!'; // SyntaxError: Identifier 'greeting' has already been declared

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

Задание

Создайте переменную с именем url и значением https://hexlet.io. Выведите значение этой переменной на экран два раза.

Коммерческий опыт и Трудоустройство

Полезное

  • let

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "ИИ-помощник":

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

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

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

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются
← ПредыдущийСледующий →
← ПредыдущийСледующий →
← ПредыдущийСледующий →

Ваше упражнение проверяется по этим тестам

// @ts-check

import { expect, test, vi } from 'vitest';

test('hello world', async () => {
  const consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(() => {});
  await import('./index.js');

  const firstArg = consoleLogSpy.mock.calls.join('\n');

  expect(firstArg).toBe('https://hexlet.io\nhttps://hexlet.io');
});
← ПредыдущийСледующий →

Решение учителя откроется через:

20:00

waiting_clock
← ПредыдущийСледующий →