JavaScript 에서 상수를 사용하는 방법이 있습니까?
그렇지 않은 경우 상수로 사용되는 변수를 지정하는 일반적인 방법은 무엇입니까?
답변
ES2015 이후 JavaScript는 다음과 같은 개념을 가지고 있습니다 const
.
const MY_CONSTANT = "some-value";
이것은 IE 8, 9 및 10을 제외한 거의 모든 브라우저 에서 작동 합니다. 일부는 엄격한 모드를 사용해야 할 수도 있습니다 .
var
ALL_CAPS와 같은 규칙을 사용 하여 이전 브라우저를 지원해야하거나 레거시 코드로 작업하는 경우 특정 값을 수정해서는 안됨을 표시 할 수 있습니다 .
var MY_CONSTANT = "some-value";
답변
변수가 수정되지 않도록 보호하려고합니까? 그렇다면 모듈 패턴을 사용할 수 있습니다.
var CONFIG = (function() {
var private = {
'MY_CONST': '1',
'ANOTHER_CONST': '2'
};
return {
get: function(name) { return private[name]; }
};
})();
alert('MY_CONST: ' + CONFIG.get('MY_CONST')); // 1
CONFIG.MY_CONST = '2';
alert('MY_CONST: ' + CONFIG.get('MY_CONST')); // 1
CONFIG.private.MY_CONST = '2'; // error
alert('MY_CONST: ' + CONFIG.get('MY_CONST')); // 1
이 방법을 사용하면 값을 수정할 수 없습니다. 그러나 CONFIG :(.)에서 get () 메소드를 사용해야합니다.
변수 값을 엄격하게 보호 할 필요가 없으면 제안 된대로 수행하고 모든 CAPS 규칙을 사용하십시오.
답변
const
키워드에 ECMA 스크립트 (6) 초안 하지만 지금까지 유일한 브라우저 지원의 겉 핥기 즐깁니다 : http://kangax.github.io/compat-table/es6/를 . 구문은 다음과 같습니다.
const CONSTANT_NAME = 0;
답변
"use strict";
var constants = Object.freeze({
"π": 3.141592653589793 ,
"e": 2.718281828459045 ,
"i": Math.sqrt(-1)
});
constants.π; // -> 3.141592653589793
constants.π = 3; // -> TypeError: Cannot assign to read only property 'π' …
constants.π; // -> 3.141592653589793
delete constants.π; // -> TypeError: Unable to delete property.
constants.π; // -> 3.141592653589793
Object.freeze를 참조하십시오 . 참조를 읽기 전용으로 만들려는 경우 사용할const
수 있습니다 constants
.
답변
IE는 다음과 같은 상수를 지원합니다.
<script language="VBScript">
Const IE_CONST = True
</script>
<script type="text/javascript">
if (typeof TEST_CONST == 'undefined') {
const IE_CONST = false;
}
alert(IE_CONST);
</script>
답변
ECMAScript 5는 다음을 소개합니다 Object.defineProperty
:
Object.defineProperty (window,'CONSTANT',{ value : 5, writable: false });
그것은있어 모든 현대적인 브라우저에서 지원 (물론 IE ≥ 9).
ES5의 Object.defineProperty 도 참조하십시오 .
답변
아니요, 일반적으로 아닙니다. Firefox는 구현 const
하지만 IE는 그렇지 않습니다.
@ 존 다른 언어로 년 동안 사용되어왔다 consts에 대한 일반적인 명명 연습 점, 나는 당신이 그것을 사용할 수없는 이유가 없습니다. 물론 이것이 누군가가 변수의 값을 덮어 쓰지 않는다는 것을 의미하지는 않습니다. 🙂