수색…


비고

컴퓨터 프로그래밍에서 열거 형 (열거 형 또는 열거 형이라고도 함)은 형식의 요소, 멤버 또는 열거 자라고하는 명명 된 값 집합으로 구성된 데이터 형식입니다. 열거 자 이름은 일반적으로 언어에서 상수로 동작하는 식별자입니다. 열거 형식을 갖는 것으로 선언 된 변수는 열거 자 중 하나를 값으로 할당 할 수 있습니다.

Wikipedia : 열거 형

JavaScript는 약한 형식이며, 변수는 미리 형식으로 선언되지 않으며 네이티브 enum 데이터 형식이 없습니다. 여기서 제공되는 예제에는 열거 자, 대체 방법 및 가능한 절충을 시뮬레이트하는 여러 가지 방법이 포함될 수 있습니다.

Object.freeze ()를 사용하여 열거 형 정의

5.1

JavaScript는 열거자를 직접 지원하지 않지만 열거 형의 기능은 모방 할 수 있습니다.

// Prevent the enum from being changed
const TestEnum = Object.freeze({
    One:1,
    Two:2,
    Three:3
});
// Define a variable with a value from the enum
var x = TestEnum.Two;
// Prints a value according to the variable's enum value
switch(x) {
    case TestEnum.One:
        console.log("111");
        break;

    case TestEnum.Two:
        console.log("222");
}

위의 열거 정의는 다음과 같이 작성할 수도 있습니다.

var TestEnum = { One: 1, Two: 2, Three: 3 }
Object.freeze(TestEnum);

그 후에 변수를 정의하고 이전과 같이 인쇄 할 수 있습니다.

대체 정의

Object.freeze() 메서드는 버전 5.1부터 사용할 수 있습니다. 이전 버전의 경우 다음 코드를 사용할 수 있습니다 (버전 5.1 이상에서도 작동 함).

var ColorsEnum = {
    WHITE: 0,
    GRAY: 1,
    BLACK: 2
}
// Define a variable with a value from the enum
var currentColor = ColorsEnum.GRAY;

열거 형 변수 인쇄하기

위의 방법 중 하나를 사용하여 열거 형을 정의하고 변수를 설정 한 후에는 값의 열거 형에서 변수의 값과 해당 이름을 모두 인쇄 할 수 있습니다. 다음은 그 예입니다.

// Define the enum
var ColorsEnum = { WHITE: 0, GRAY: 1, BLACK: 2 }
Object.freeze(ColorsEnum);
// Define the variable and assign a value
var color = ColorsEnum.BLACK;
if(color == ColorsEnum.BLACK) {
   console.log(color);    // This will print "2"
   var ce = ColorsEnum;
   for (var name in ce) {
     if (ce[name] == ce.BLACK)
       console.log(name);    // This will print "BLACK"
   } 
}

기호를 사용하여 Enums 구현하기

ES6에서는 Enum에 가능한 값으로 문자열을 사용하는 대신 Object 속성의 키로 사용할 수있는 고유하고 변경할 수없는 프리미티브 값인 Symbols를 도입 했으므로 심볼을 사용할 수 있습니다.

// Simple symbol
const newSymbol = Symbol();
typeof newSymbol === 'symbol' // true

// A symbol with a label
const anotherSymbol = Symbol("label");

// Each symbol is unique
const yetAnotherSymbol = Symbol("label");
yetAnotherSymbol === anotherSymbol; // false


const Regnum_Animale    = Symbol();
const Regnum_Vegetabile = Symbol();
const Regnum_Lapideum   = Symbol();

function describe(kingdom) {

  switch(kingdom) {

    case Regnum_Animale:
        return "Animal kingdom";
    case Regnum_Vegetabile:
        return "Vegetable kingdom";
    case Regnum_Lapideum:
        return "Mineral kingdom";
  }

}

describe(Regnum_Vegetabile);
// Vegetable kingdom

ECMAScript 6 문서의 기호 는이 새로운 기본 유형을보다 자세히 설명합니다.

자동 열거 형 값

5.1

이 예제에서는 열거 형 목록의 각 항목에 값을 자동으로 할당하는 방법을 보여줍니다. 이렇게하면 두 열거 형이 실수로 같은 값을 가지는 것을 방지 할 수 있습니다. 참고 : Object.freeze 브라우저 지원

var testEnum = function() {
    // Initializes the enumerations
    var enumList = [
        "One",
        "Two",
        "Three"
    ];
    enumObj = {};
    enumList.forEach((item, index)=>enumObj[item] = index + 1); 
    
    // Do not allow the object to be changed
    Object.freeze(enumObj);
    return enumObj;
}();

console.log(testEnum.One); // 1 will be logged

var x = testEnum.Two;

switch(x) {
    case testEnum.One:
        console.log("111");
        break;

    case testEnum.Two:
        console.log("222"); // 222 will be logged
        break;
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow