=================================
=================================
=================================
출처: http://code.i-harness.com/ko/q/4649f
자바 스크립트에서 enum을 정의하기위한 기본 구문은 무엇입니까? 같은 것 :
my.namespace.ColorEnum = { RED : 0, GREEN : 1, BLUE : 2 } // later on if(currentColor == my.namespace.ColorEnum.RED) { // whatever }
아니면 더 바람직한 관용어가 있습니까?
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
업데이트 : 모든 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
답변에 댓글을 게시 할 수 없으므로 Google에 높은 점수를 표시했기 때문에 스레드를 부딪쳤을 것입니다.
1.8.5부터 물체를 봉인하고 고정 할 수 있으므로 위의 내용을 다음과 같이 정의하십시오.
var DaysEnum = Object.freeze({"monday":1, "tuesday":2, "wednesday":3, ...})
또는
var DaysEnum = {"monday":1, "tuesday":2, "wednesday":3, ...} Object.freeze(DaysEnum)
and voila! JS enums;
출처 : https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/freeze
IMHO 따옴표는 필요하지 않지만 일관성을 유지했습니다.
결론 : 당신은 할 수 없습니다.
가짜로 만들 수는 있지만 유형 안전을 얻지는 못합니다. 일반적으로 정수 값에 매핑 된 문자열 값의 간단한 사전을 만들어이 작업을 수행합니다. 예 :
var DaysEnum = {"monday":1, "tuesday":2, "wednesday":3, ...} Document.Write("Enumerant: " + DaysEnum.tuesday);
이 접근 방식의 문제점은 무엇입니까? 실수로 열거자를 다시 정의하거나 실수로 중복 열거 형 값을 가질 수 있습니다. 예 :
DaysEnum.monday = 4; // whoops, monday is now thursday, too
편집하다
Artur Czajka의 Object.freeze는 어떻습니까? 월요일부터 목요일에 집을 지키는 것을 막을 수 있니? - 튀김 쿼드
물론, Object.freeze
는 내가 불평 한 문제를 완전히 해결할 것입니다. 나는 위의 글을 쓸 때 Object.freeze
가 실제로 존재하지 않는다는 것을 모두에게 상기시키고 싶습니다.
자 .... 이제는 아주 흥미로운 가능성을 열어줍니다.
편집 2
열거 형을 생성하는 데 매우 유용한 라이브러리가 있습니다.
http://www.2ality.com/2011/10/enums.html
그것이 열거 형의 모든 유효한 사용에 아마도 맞지는 않지만, 아주 먼 길을 간다.
=================================
=================================
=================================
'WEB > JavaScript' 카테고리의 다른 글
[JavaScript] 자바스크립트 마우스오른쪽 컨텍스트 메뉴 안나오게하기 관련 (0) | 2017.12.06 |
---|---|
[JavaScript] 자바스크립트 이벤트 종류와 이벤트리스너 마우스 움직임, 오른쪽 왼쪽 버튼 이벤트 등등 관련 (0) | 2017.11.23 |
[JavaScript] 자바스크립트 현재 페이지 주소 얻기 관련 (0) | 2017.11.23 |
[Javascript] 자바스크립트 cache 로드때 코드 갱신 쿠키삭제 캐시삭제 로드 브라우져 캐시 우회하기 관련 (0) | 2017.11.23 |
[JavaScript] 자바스크립트 파일 압축(zip, jszip 등등) 관련 (0) | 2017.11.23 |
댓글 영역