>웹 프론트엔드 >프런트엔드 Q&A >es6에서 읽기 전용 상수를 선언하는 방법

es6에서 읽기 전용 상수를 선언하는 방법

青灯夜游
青灯夜游원래의
2023-01-11 17:38:562031검색

es6에서는 const 키워드를 사용하여 읽기 전용 상수를 선언할 수 있으며 구문은 "const 상수 이름 = 상수 값;"입니다. 일단 선언되면 상수를 초기화해야 하며 초기화된 값을 변경할 수 없습니다. const로 선언된 상수는 블록 범위에 속하며 "임시 데드 존"의 적용을 받습니다. 이는 창에 전역 속성을 생성하지 않으며 다시 할당하거나 다시 선언할 수 없습니다.

es6에서 읽기 전용 상수를 선언하는 방법

이 튜토리얼의 운영 환경: Windows 7 시스템, ECMAScript 버전 6, Dell G3 컴퓨터.

es6에서는 const 키워드를 사용하여 읽기 전용 상수를 선언할 수 있습니다.

es6 const 키워드

const는 읽기 전용 상수를 선언합니다. 일단 선언된 상수는 초기화되어야 하며 초기화된 값은 변경할 수 없습니다.

const PI = 3.1415;
PI // 3.1415

PI = 3;
// TypeError: Assignment to constant variable.

const 상수는 다음 규칙을 따릅니다.

  • 은 블록 범위에 속합니다.

  • "일시적 데드존"이 적용됩니다.

  • 창에 전역 속성을 생성하지 않습니다.

  • 재배포 불가.

  • 다시 말할 수 없습니다.

const 변수는 선언되면 즉시 초기화해야 합니다.

const foo;
// SyntaxError: Missing initializer in const declaration

위 코드는 const의 경우 값을 할당하지 않고 선언만 하면 오류가 보고된다는 것을 나타냅니다.

const의 범위는 let 명령과 동일합니다. 선언된 블록 수준 범위 내에서만 유효합니다.

if (true) {
  const MAX = 5;
}

MAX // Uncaught ReferenceError: MAX is not defined

const 명령으로 선언된 상수도 승격되지 않습니다. 임시 데드존도 있으며 선언된 위치 이후에만 사용할 수 있습니다.

if (true) {
  console.log(MAX); // ReferenceError
  const MAX = 5;
}

위 코드는 상수 MAX가 선언되기 전에 호출되어 오류가 보고됩니다.

const로 선언한 상수는 let처럼 반복해서 선언할 수 없습니다.

var message = "Hello!";
let age = 25;

// 以下两行都会报错
const message = "Goodbye!";
const age = 30;

const

const의 본질은 실제로 변수의 값을 변경할 수 없는 것이 아니라 변수가 가리키는 메모리 주소에 저장된 데이터를 변경할 수 없다는 것을 보장합니다. 단순한 유형의 데이터(숫자 값, 문자열, 부울 값)의 경우 값은 변수가 가리키는 메모리 주소에 저장되므로 상수와 동일합니다. 그러나 복합 유형 데이터(주로 객체 및 배열)의 경우 변수가 가리키는 메모리 주소는 실제 데이터에 대한 포인터만 저장합니다. Const는 이 포인터가 고정되어 있다는 것만 보장할 수 있습니다(즉, 항상 다른 고정 주소를 가리킵니다). , 그것이 가리키는 데이터 구조가 가변적인지 여부는 완전히 통제 불능입니다. 그러므로 객체를 상수로 선언할 때는 매우 주의해야 합니다.

const foo = {};

// 为 foo 添加一个属性,可以成功
foo.prop = 123;
foo.prop // 123

// 将 foo 指向另一个对象,就会报错
foo = {}; // TypeError: "foo" is read-only

위 코드에서 상수 foo는 객체를 가리키는 주소를 저장합니다. 변경할 수 없는 유일한 것은 이 주소입니다. 즉, foo가 다른 주소를 가리킬 수는 없지만 개체 자체는 변경 가능하므로 여전히 새 속성을 추가할 수 있습니다.

여기 또 다른 예가 있습니다.

const a = [];
a.push('Hello'); // 可执行
a.length = 0;    // 可执行
a = ['Dave'];    // 报错

위 코드에서 상수 a는 배열입니다. 배열 자체는 쓰기 가능하지만, a에 다른 배열이 할당되면 오류가 보고됩니다.

정말로 개체를 고정하려면 Object.freeze 메서드를 사용해야 합니다.

const foo = Object.freeze({});

// 常规模式时,下面一行不起作用;
// 严格模式时,该行会报错
foo.prop = 123;

위 코드에서 상수 foo는 고정된 객체를 가리키므로 새 속성을 추가할 수 없으며 엄격 모드에서는 오류가 보고됩니다.

객체 자체를 동결하는 것 외에도 객체의 속성도 동결해야 합니다. 아래는 객체를 완전히 동결시키는 함수입니다.

var constantize = (obj) => {
  Object.freeze(obj);
  Object.keys(obj).forEach( (key, i) => {
    if ( typeof obj[key] === 'object' ) {
      constantize( obj[key] );
    }
  });
};

【관련 추천: javascript 비디오 튜토리얼, 프로그래밍 비디오

위 내용은 es6에서 읽기 전용 상수를 선언하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.