У вас когда-нибудь возникала проблема, когда переменная внезапно содержала что-то, чего вы не ожидали? Есть простые способы предотвратить повторение подобного!

Поэтому, когда вы работаете с JavaScript, у вас есть возможность перезаписать любую переменную чем угодно. Это может быть полезно, но также может быть болью. Именно поэтому многие разработчики JavaScript перешли на TypeScript. (Есть еще много преимуществ, но это в другой раз)

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

var a = 'test';
[50 lines of code]
var a = 1;
console.log(a);

Итак, в приведенном выше примере вы можете ожидать, что console.log выведет «тест», потому что это то, что вы ему назначили. Вы, наверное, забыли про второе объявление переменной и теперь недоумеваете, почему переменная содержала число, а не строку test. Это может быть проблемой.

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

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

Преимущество let над var

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

let a = 'test';
[50 lines of code]
let a = 1;
console.log(a);

Вы можете подумать, что console.log снова выведет 1, но угадайте еще раз. Вот что вы теперь получите, когда запустите этот код:

SyntaxError: Identifier 'a' has already been declared

Что здесь происходит, так это то, что let предотвращает повторное объявление одной и той же переменной дважды. Это уже предотвратит случайную перезапись всего, что вы уже объявили.

Но это еще не предотвращает перезапись переменной. Потому что это все еще возможно:

let a = 'test';
[50 lines of code]
a = 1;
console.log(a);

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

Так как же предотвратить это? Что ж, пора посмотреть на const

Преимущество const над let

Глядя на const, вы могли уже заметить в названии, что это должно быть constant. И это именно то, для чего это нужно. Все, что вы установите в const, останется прежним. Возьмите тот же код еще раз:

const a = 'test';
[50 lines of code]
a = 1;
console.log(a);

Тогда вы получите эту ошибку:

TypeError: Assignment to constant variable.

Это также происходит, если второе присваивание является строкой, а не числом, показанным в нашем примере.

Это полностью защитит вас от перезаписи переменной чем-то другим. И давайте будем честными, как часто вам на самом деле нужно перезаписывать переменную другим значением? Гораздо меньше, чем вы думаете.

Вывод

Поэтому всякий раз, когда вы объявляете переменную, которую не нужно изменять, используйте const. Если вы разрабатываете свой код с изменяемой переменной, используйте let. Хорошим примером может быть цикл for.

for (let i = 0; i < 10; i++)

Или когда вы имеете дело с такими манипуляциями с текстом

let text = "a.d.c";
text = text.replace('d','b');
console.log(text);

Но в приведенном выше примере вы, возможно, уже решили просто сохранить оригинал и вместо этого установить новый текст в новую переменную.

const originalText = "a.d.c";
const newText = originalText.replace('d','b');
console.log(newText);

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

Но подытоживая и цитируя Evert Pot в его блоге

  • Прекратите использовать var.
  • Используйте const по умолчанию везде.
  • Используйте let, если необходимо

Дальнейшее чтение