const

const 선언은 값에 읽기 전용 참조를 생성합니다. 담긴 값이 불변임을 뜻하는 게 아닙니다, 단지 그 변수 식별자는 재할당될 수 없습니다.

구문

const name1 = value1 [, name2 = value2 [, ... [, nameN = valueN]]];
nameN
상수명, 이는 어떤 적법한 식별자든 될 수 있습니다.
valueN
상수값. 즉 이는 어떤 적법한 이든 될 수 있습니다.

설명

이 선언은 선언된 함수에 전역 또는 지역일 수 있는 상수를 만듭니다. 상수 초기자(initializer)가 필요합니다. 즉 선언되는 같은 문에 그 값을 지정해야 합니다(이는 나중에 변경될 수 없는 점을 감안하면 말이 됩니다).

상수는 let 문을 사용하여 정의된 변수와 마찬가지로 블록 범위(block-scope)입니다. 상수의 값은 재할당을 통해 바뀔 수 없고 재선언될 수 없습니다.

let에 적용한 "일시적 사각 지대"에 관한 모든 고려는, const에도 적용합니다.

상수는 같은 범위의 상수 또는 변수와 그 이름을 공유할 수 없습니다.

다음 예는 상수가 어떻게 동작하는지를 보입니다. 이를 브라우저 콘솔에 따라해 보세요.

// 주의: 상수는 대소문자로 선언될 수 있습니다, 하지만
// 일반 관례는 모두 대문자로 쓰는 것입니다.

// MY_FAV를 상수로 정의하고 그 값을 7로 줌
const MY_FAV = 7;

// 이는 Firefox 및 Chrome 에서 조용히 실패함 (하지만 Safari에서는 실패하지 않음)
MY_FAV = 20;

// 7이 찍힘
console.log("my favorite number is: " + MY_FAV);

// 상수를 재선언하려는 시도는 오류 발생
const MY_FAV = 20;

// 이름 MY_FAV는 위에서 상수에 예약되어, 이도 역시 실패함
var MY_FAV = 20;

// MY_FAV는 여전히 7
console.log("my favorite number is " + MY_FAV);

// const 변수 A에 할당은 구문 오류
const A = 1; A = 2;

// const는 초기자가 필요
const FOO; // SyntaxError: const 선언 내에 = 가 빠짐

// const는 객체에도 동작
const MY_OBJECT = {"key": "value"};

// 객체 덮어쓰기는 위에서처럼 실패 (Firefox 및 Chrome 에서는 하지만 Safari 에서는 성공)
MY_OBJECT = {"OTHER_KEY": "value"};

// 그러나, 객체 key는 보호되지 않기에
// 다음 문은 문제없이 실행됨
MY_OBJECT.key = "otherValue"; // 객체를 불변하게 하려면 Object.freeze()를 쓰세요

스펙

스펙 상태 설명
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Let and Const Declarations' in that specification.
Standard 초기 정의.
ECMAScript 2017 Draft (ECMA-262)
The definition of 'Let and Const Declarations' in that specification.
Draft  

브라우저 호환성

Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari
Basic support 21 (Yes) 36 (36) 11 12 5.1
Reassignment fails 20 (Yes) 13 (13) 11 ? ?
Allowed in sloppy mode 49.0          
Feature Android Android Webview Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile Chrome for Android
Basic support No support (Yes) ? ? (Yes) ? (Yes)
Reassignment fails No support (Yes) ? ? (Yes) ? (Yes)
Allowed in sloppy mode No support 49.0         49.0

호환성 주의사항

Firefox & Chrome의 이전 버전 및 현재 Safari 5.1.7 및 Opera 12.00 에서는, const로 변수를 정의하는 경우, 여전히 나중에 그 값을 바꿀 수 있습니다. Internet Explorer 6-10에서는 지원되지 않지만 Internet Explorer 11에 포함되었습니다.

Firefox 전용 주의사항

const 선언은 const가 ECMAScript 2015 (ES6) 스펙에 등장하기 오래 전에 Firefox에서 구현되었습니다. const의 ES6 준수는 bug 950547bug 611388 참조.

  • SpiderMonkey 46 (Firefox 46 / Thunderbird 46 / SeaMonkey 2.43) 전에는, TypeErrorSyntaxError 대신에 재선언 시 발생됐습니다(bug 1198833).
  • SpiderMonkey 36 (Firefox 36 / Thunderbird 36 / SeaMonkey 2.33) 부터:
    • {const a=1};a는 이제 ReferenceError가 발생하고 블록 범위로 인해 더는 1을 반환하지 않습니다.
    • const a;는 이제 SyntaxError ("const 선언 내에 = 가 빠짐")가 발생합니다: 초기자가 필요합니다.
    • const a = 1; a = 2;도 이제 SyntaxError ("const a에 무효한 할당")가 발생합니다.

참조

문서 태그 및 공헌자

 이 페이지의 공헌자: Netaras, kuil09
 최종 변경: Netaras,