Почти каждая статья, посвященная let
и const
, дает это неверное объяснение const
.
Переменная const
может быть изменена после ее объявления и назначения.
Переменная const
не может быть переназначена после ее объявления.
Даже TypeError
, выдаваемый при попытке переоценки переменной const
, проясняет это:
const obj = { a: 1}; obj.a = 2; // no problem obj is now changed to { a: 2 } obj = { a: 2 }; // Uncaught TypeError: Assignment to constant variable.
Утверждение, что его нельзя изменить, вводит в заблуждение и может отбить у людей желание использовать const
при работе с непримитивными типами, которые необходимо изменить.
Это нехорошо, потому что const
следует всегда использовать, а let
следует использовать только в крайнем случае, т. е. при использовании примитива или объекта, который необходимо переназначить.
const arr = []; for (let i=0; i < 3; i++) { arr.push(i); } // arr = 10) [0, 1, 2] const obj = {}; for (const c of ['a', 'b', 'c']) { obj[c] = c; } // obj = { a: "a", b: "b", c: "c" }