Ключевое слово const гарантирует, что создаваемая переменная будет доступна только для чтения. Однако это не означает, что фактическое значение, на которое ссылается константа, является неизменяемой. Посмотрите на следующий пример:

JavaScript const и объекты

Ключевое слово const гарантирует, что создаваемая переменная будет доступна только для чтения. Однако это не означает, что фактическое значение, на которое ссылается константа, является неизменяемой. Посмотрите на следующий пример:

const person = { age : 20 };
  person.age = 30 ; // OK
  console.log ( person.age ) ; // 30

Хотя переменная person и является константой, вы можете изменить значение ее свойств. Но вы не можете назначить другое значение константе.

  person = { age : 40 } ; // TypeError

Если вы хотите, чтобы значение объекта person было неизменным, вы должны его заморозить следующим образом.

const person = Object.freeze ( { age : 20 } );
  person.age = 30 ; // TypeError

Обратите внимание: Object.freeze() не замораживает вложенные свойства, которые являются объектами, что означает, что он только замораживает свойства объекта первого уровня, а не объекты, на которые ссылаются его свойства. Например, объект company является константным и замороженным.

const company = Object.freeze ( {
  name : 'Mr. Rusakov & Co.' ,
  address : {
    street : 'Wall Street 46',
    city : 'Washington' ,
    state : 'WS' ,
    zipcode : 95134
  }
 });

Но объект company.address не является неизменным, вы можете добавить новое свойство к объекту company.address следующим образом:

company.address.country = 'USA' ; // OK

JavaScript const в цикле for

ES6 предоставляет новую конструкцию for..of, которая используется для создания цикла по итерируемым объектам, таким как массивы, карты, наборы.

  var scores = [ 75 , 80 , 95 ];
  for ( let score of scores ) {   
      console.log( score ) ;
  }

Если вы не собираетесь изменять переменную score внутри цикла, ее необходимо объявить, используя вместо этого ключевое слово const .

var scores = [ 75 , 80 , 95 ];
  for ( const score of scores ) {
        console.log ( score ) ;
  }

Это работает, потому что на каждой итерации цикл for...of создает новую привязку для ключевого слова const . Другими словами, на каждой итерации создается новая инициализированная переменная.

Обратите внимание на то, что const не будет работать в стандартном цикле for. Попытка использовать ключевое слово const для объявления переменной в стандартном цикле for приведет к ошибке TypeError, как показано ниже.

for ( const i = 0 ; i < scores.length ; i ++ ) { // TypeError
   console.log ( scores [ i ] ) ;
  }

Причина в том, что объявление промежуточной переменной i происходит только один раз до начала цикла, а потом мы пытаемся изменить ее, что, как известно, для константной переменной недопустимо.

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