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.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.