[javascript] JavaScript에는 상수가 있습니까?

JavaScript 에서 상수를 사용하는 방법이 있습니까?

그렇지 않은 경우 상수로 사용되는 변수를 지정하는 일반적인 방법은 무엇입니까?



답변

ES2015 이후 JavaScript는 다음과 같은 개념을 가지고 있습니다 const.

const MY_CONSTANT = "some-value";

이것은 IE 8, 9 및 10을 제외한 거의 모든 브라우저 에서 작동 합니다. 일부는 엄격한 모드를 사용해야 할 수도 있습니다 .

varALL_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에 대한 일반적인 명명 연습 점, 나는 당신이 그것을 사용할 수없는 이유가 없습니다. 물론 이것이 누군가가 변수의 값을 덮어 쓰지 않는다는 것을 의미하지는 않습니다. 🙂