업데이트 : 모든 upvotes 모두 주셔서 감사하지만, 아래의 내 대답은 더 이상 자바 스크립트에서 열거 형을 작성하는 가장 좋은 방법이라고 생각하지 않습니다. 자세한 내용은 내 블로그 게시물을 참조하십시오 : Javascript의 Enums .
이름을 알려주는 것은 이미 가능합니다.
if (currentColor == my.namespace.ColorEnum.RED) { // alert name of currentColor (RED: 0) var col = my.namespace.ColorEnum; for (var name in col) { if (col[name] == col.RED) alert(name); } }
또는 값 객체를 만들 수 있으므로 케이크를 가지고 먹을 수도 있습니다.
var SIZE = { SMALL : {value: 0, name: "Small", code: "S"}, MEDIUM: {value: 1, name: "Medium", code: "M"}, LARGE : {value: 2, name: "Large", code: "L"} }; var currentSize = SIZE.MEDIUM; if (currentSize == SIZE.MEDIUM) { // this alerts: "1: Medium" alert(currentSize.value + ": " + currentSize.name); }
Javascript에서는 역동적 인 언어이므로 열거 형 값을 나중에 설정에 추가 할 수도 있습니다.
// Add EXTRALARGE size SIZE.EXTRALARGE = {value: 3, name: "Extra Large", code: "XL"};
열거 형 필드 (이 예제에서 값, 이름 및 코드)는 신원 확인에 필요하지 않으며 편리함을 위해서만 존재한다는 점을 기억하십시오. 또한 size 속성의 이름 자체는 하드 코드 될 필요가 없지만 동적으로 설정할 수도 있습니다. 따라서 새로운 enum 값의 이름 만 알면 문제없이 추가 할 수 있습니다.
// Add 'Extra Large' size, only knowing it's name var name = "Extra Large"; SIZE[name] = {value: -1, name: name, code: "?"};
물론 이는 일부 가정을 더 이상 만들 수 없다는 것을 의미합니다 (이 값은 예를 들어 크기의 올바른 순서를 나타냅니다).
Javascript에서는 객체가지도 또는 해시 테이블과 같음을 기억하십시오. 이름 - 값 쌍 집합입니다. 루프를 반복하거나 미리 조작하지 않고 조작 할 수 있습니다.
예 :
for (var sz in SIZE) { // sz will be the names of the objects in SIZE, so // 'SMALL', 'MEDIUM', 'LARGE', 'EXTRALARGE' var size = SIZE[sz]; // Get the object mapped to the name in sz for (var prop in size) { // Get all the properties of the size object, iterates over // 'value', 'name' and 'code'. You can inspect everything this way. } }
그리고 네가 네임 스페이스에 관심이 있다면 간단하지만 강력한 네임 스페이스와 자바 스크립트에 대한 의존성 관리를 위해 내 솔루션을 살펴보고 싶을 것이다. Packages JS