Константа JavaScript


Оглавление

    Показать оглавление

Ключевое слово const было введено в ES6 (2015)

Переменные, определенные с помощью const, не могут быть переобъявлены

Переменные, определенные с помощью const, не могут быть переназначены

Переменные, определенные с помощью const, имеют область блока

Невозможно переназначить

Переменную const нельзя переназначить:

Пример

const PI = 3.141592653589793;
PI = 3.14;      // This will give an error
PI = PI + 10;   // This will also give an error

Попробуйте сами →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript const</h2>

<p id="demo"></p>

<script>
try {
  const PI = 3.141592653589793;
  PI = 3.14;
}
catch (err) {
  document.getElementById("demo").innerHTML = err;
}
</script>

</body>
</html>

Должно быть назначено

Переменным const JavaScript должно быть присвоено значение при их объявлении:

Правильный

const PI = 3.14159265359;

Неправильный

const PI;
PI = 3.14159265359;

Когда использовать JavaScript const?

Всегда объявляйте переменную с помощью const, если вы это знаете значение не следует менять.

Используйте const, когда объявляете:

  • Новый массив

  • Новый объект

  • Новая функция

  • Новое регулярное выражение


Постоянные объекты и массивы

Ключевое слово const немного вводит в заблуждение.

Он не определяет постоянное значение. Он определяет постоянную ссылку на значение.

Из-за этого вы НЕ МОЖЕТЕ:

  • Переназначить постоянное значение

  • Переназначить постоянный массив

  • Переназначить постоянный объект

Но вы можете:

  • Изменить элементы постоянного массива

  • Изменить свойства постоянного объекта


Константные массивы

Вы можете изменить элементы постоянного массива:

Пример

// You can create a constant array:
const cars = ["Saab", "Volvo", "BMW"];

// You can change an element:
cars[0] = "Toyota";

// You can add an element:
cars.push("Audi");

Попробуйте сами →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript const</h2>

<p>Declaring a constant array does NOT make the elements unchangeable:</p>

<p id="demo"></p>

<script>
// Create an Array:
const cars = ["Saab", "Volvo", "BMW"];

// Change an element:
cars[0] = "Toyota";

// Add an element:
cars.push("Audi");

// Display the Array:
document.getElementById("demo").innerHTML = cars; 
</script>

</body>
</html>

Но вы НЕ можете переназначить массив:

Пример

const cars = ["Saab", "Volvo", "BMW"];

cars = ["Toyota", "Volvo", "Audi"];    // ERROR

Попробуйте сами →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript const</h2>

<p>You can NOT reassign a constant array:</p>

<p id="demo"></p>

<script>
try {
  const cars = ["Saab", "Volvo", "BMW"];
  cars = ["Toyota", "Volvo", "Audi"];
}
catch (err) {
  document.getElementById("demo").innerHTML = err;
}
</script>

</body>
</html>

Постоянные объекты

Вы можете изменить свойства постоянного объекта:

Пример

// You can create a const object:
const car = {type:"Fiat", model:"500", color:"white"};

// You can change a property:
car.color = "red";

// You can add a property:
car.owner = "Johnson";

Попробуйте сами →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript const</h2>

<p>Declaring a constant object does NOT make the objects properties unchangeable:</p>

<p id="demo"></p>

<script>
// Create an object:
const car = {type:"Fiat", model:"500", color:"white"};

// Change a property:
car.color = "red";

// Add a property:
car.owner = "Johnson";

// Display the property:
document.getElementById("demo").innerHTML = "Car owner is " + car.owner; 
</script>

</body>
</html>

Но вы НЕ можете переназначить объект:

Пример

const car = {type:"Fiat", model:"500", color:"white"};

car = {type:"Volvo", model:"EX60", color:"red"};    // 
  ERROR

Попробуйте сами →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript const</h2>

<p>You can NOT reassign a constant object:</p>

<p id="demo"></p>

<script>
try {
  const car = {type:"Fiat", model:"500", color:"white"};
  car = {type:"Volvo", model:"EX60", color:"red"};
}
catch (err) {
  document.getElementById("demo").innerHTML = err;
}
</script>

</body>
</html>

Разница между var, let и const

ScopeRedeclareReassignHoistedBinds this
varNoYesYesYesYes
letYesNoYesNoNo
constYesNoNoNoNo

То, что хорошо?

let и const иметь область действия блока.

let и const не может быть переобъявлен.

let и const должен быть объявлен перед использованием.

let и const не привязывается к этому.

let и const не подняты.

Что такое Нехорошо?

var не обязательно объявлять.

var поднимается.

var привязывается к этому.


Поддержка браузера

Ключевые слова let и const не поддерживается в Internet Explorer 11 или более ранних версиях.

В следующей таблице указаны первые версии браузера с полной поддержкой:

Chrome 49 Edge 12 Firefox 36 Safari 11 Opera 36
Mar, 2016 Jul, 2015 Jan, 2015 Sep, 2017 Mar, 2016


Область действия блока

Объявление переменной с помощью const аналогично let когда дело доходит до Области блока.

В этом примере x, объявленный в блоке, не совпадает с x, объявленным вне блока:

Пример

const x = 10;
// Here x is 10

{ 
const x = 2;
// Here x is 2
}

// Here x is 10

Попробуйте сами →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScropt const variables has block scope</h2>

<p id="demo"></p>

<script>
const  x = 10;
// Here x is 10

{  
const x = 2;
// Here x is 2
}

// Here x is 10
document.getElementById("demo").innerHTML = "x is " + x;
</script>

</body>
</html>


Вы можете узнать больше об области действия блока в главе Область действия JavaScript.


Переобъявление

Переобъявление переменной JavaScript var разрешено. в любом месте программы:

Пример

var x = 2;     // Allowed
var x = 3;     // Allowed
  x = 4;         // Allowed

Повторное объявление существующего var или let переменная const в той же области недопустима:

Пример

var x = 2;     // Allowed
const x = 2;   // Not allowed

{
let x = 2;     // Allowed
const x = 2;   // Not allowed
}

{
const x = 2;   // Allowed
const x = 2;   // Not allowed
}
  

Переназначение существующей переменной const в той же области действия не допускается:

Пример

 const x = 2;     // Allowed
  x = 2;           // Not allowed
  var x = 2;       // Not allowed
  let x = 2;       // Not allowed
  const x = 2;     // Not allowed
  
{	  const x = 2;   // Allowed
  x = 2;         
  // Not allowed
  var x = 2;     
  // Not allowed
  let x = 2;     
  // Not allowed
   
  const x = 2;   // Not allowed
}
  

Переобъявление переменной с помощью const в другой области видимости или в другом блоке разрешено:

Пример

 const x = 2;       // Allowed
{	  const x = 3;   // Allowed
  }
  
  {
  const x = 4;   // Allowed
  }

Подъем

Переменные, определенные с помощью var, поднимаются наверх. и может быть инициализирован в любое время.

Значение: вы можете использовать переменную до ее объявления:

Пример

Хорошо:

 carName = "Volvo";
  var carName;

Попробуйте сами →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Hoisting</h2>

<p>With <b>var</b>, you can use a variable before it is declared:</p>

<p id="demo"></p>

<script>
carName = "Volvo";
document.getElementById("demo").innerHTML = carName;
var carName;
</script>

</body>
</html>

Если вы хотите узнать больше о подъеме, изучите главу «Поднятие JavaScript». <p>Переменные, определенные с помощью const, также поднимаются наверх, но не инициализирован.

Значение: использование переменной const до ее объявления приведет к ReferenceError:

Пример

alert (carName);
const carName = "Volvo";

Попробуйте сами →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Hoisting</h2>
<p>With <b>const</b>, you cannot use a variable before it is declared:</p>
<p id="demo"></p>

<script>

try {
  alert(carName);
  const carName = "Volvo";
}
catch (err) {
  document.getElementById("demo").innerHTML = err;
}

</script>
</body>
</html>