JavaScript Константы
ECMAScript 2015
ES2015 представил два важных новых ключевых слова JavaScript: let и const.
Переменные, определенные с помощью, const
ведут себя как let переменные, за исключением того, что их нельзя переназначить:
Пример
const PI = 3.141592653589793;
PI = 3.14; // Это выдаст ошибку
PI = PI + 10; // Это тоже выдаст ошибку
Попробуйте сами »
Область действия блока
Объявление переменной с помощью const аналогично тому, let,
когда дело доходит до области действия блока.
В этом примере x, объявленный в блоке, не совпадает с x, объявленным вне блока:
Пример
var x = 10;
// Здесь x равно 10
{
const x = 2;
// Здесь x равно 2
}
// Здесь x равно 10
Попробуйте сами »
Вы можете узнать больше о Действие блока в предыдущей главе: JavaScript Let.
Назначено при объявлении
Переменным const JavaScript должно быть присвоено значение при их объявлении:
Неверно
const PI;
PI = 3.14159265359;
Верно
const PI = 3.14159265359;
Не настоящие константы
Ключевое слово const немного вводит в заблуждение.
Он НЕ определяет постоянное значение. Он определяет постоянную ссылку на значение.
Из-за этого мы не можем изменять постоянные примитивные значения, но можем изменять свойства постоянных объектов.
Примитивные значения
Если мы присвоим константе примитивное значение, мы не сможем изменить примитивное значение:
Пример
const PI = 3.141592653589793;
PI = 3.14; // Это выдаст ошибку
PI = PI + 10; // Это тоже выдаст ошибку
Попробуйте сами »
Константные объекты могут изменяться
Вы можете изменить свойства константного объекта:
Пример
// Вы можете создать константный объект:
const car = {type:"Fiat", model:"500", color:"white"};
// Вы можете изменить свойство::
car.color = "red";
// Вы можете добавить свойство:
car.owner = "Johnson";
Попробуйте сами »
Но вы НЕ можете переназначить константный объект:
Пример
const car = {type:"Fiat", model:"500", color:"white"};
car = {type:"Volvo", model:"EX60", color:"red"}; //
ОШИБКА
Попробуйте сами »
Константные массивы могут изменяться
Вы можете изменить элементы константного массива:
Пример
// Вы можете создать константный массив:
const cars = ["Saab", "Volvo", "BMW"];
// Вы можете изменить элемент:
cars[0] = "Toyota";
// Вы можете добавить элемент:
cars.push("Audi");
Попробуйте сами »
Но вы НЕ можете переназначить константный массив:
Пример
const cars = ["Saab", "Volvo", "BMW"];
cars = ["Toyota", "Volvo", "Audi"]; //
ОШИБКА
Попробуйте сами »
Поддержка браузера
Ключевое слово const не поддерживается в Internet Explorer 10 или более ранней версии.
В следующей таблице определены первые версии браузеров с полной поддержкой const ключевого слова:
| Chrome 49 | IE / Edge 11 | Firefox 36 | Safari 10 | Opera 36 |
| Mar, 2016 | Oct, 2013 | Feb, 2015 | Sep, 2016 | Mar, 2016 |
Повторное объявление
Повторное объявление var переменной JavaScript разрешено в любом месте программы:
Пример
var x = 2; // Разрешено
var x = 3; //
Разрешено
x = 4; // Разрешено
Повторное объявление или переназначение существующей переменной var или
let переменной const,
в той же области или в том же блоке не допускается:
Пример
var x = 2; // Разрешено
const x = 2; // Не разрешено
{
let x = 2; // Разрешено
const x = 2; // Не разрешено
}
Повторное объявление или переназначение существующей const переменной,
в той же области или в том же блоке не допускается:
Пример
const x = 2; // Разрешено
const x = 3; // Не разрешено
x = 3; // Не разрешено
var x = 3; // Не разрешено
let x = 3; // Не разрешено
{
const x = 2; // Разрешено
const x = 3; // Не разрешено
x = 3;
// Не разрешено
var x = 3;
// Не разрешено
let x = 3;
// Не разрешено
}
Повторное объявление переменной const, в другой области или в другом блоке разрешено:
Пример
const x = 2; // Разрешено
{
const x = 3; // Разрешено
}
{
const x = 4; // Разрешено
}
Подъем
Переменные, определенные с помощью var,
поднимаются вверх и могут быть инициализированы в любое время
(если вы не знаете, что такое подъем, прочтите Главу о подъеме).
Значение: вы можете использовать переменную до ее объявления:
Переменные, определенные с помощью const,
поднимаются в верхнюю часть блока, но не инициализируются.
Значение: блоку кода известно о переменной, но ее нельзя использовать, пока она не будет объявлена.
Переменная находится во "временной мертвой зоне" от начала блока до его объявления.
Использование const переменной до ее объявления является синтаксической ошибкой,
поэтому код просто не запускается.
