У вас когда-нибудь возникала проблема, когда переменная внезапно содержала что-то, чего вы не ожидали? Есть простые способы предотвратить повторение подобного!
Поэтому, когда вы работаете с 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
, если необходимо