문제

자바 스크립트로 열거 형을 모방해야하며 접근 방식은 매우 간단 해 보입니다.

var MyEnum = {Left = 1; Right = 2; Top = 4; Bottom = 8}

이제 C#에서는 다음과 같은 값을 결합 할 수 있습니다.

MyEnum left_right = MyEnum.Left | MyEnum.Right

그리고 ENUM이 특정 값을 가지고 있는지 테스트 할 수 있습니다.

if (left_right & MyEnum.Left == MyEnum.Left) {...}

JavaScript에서 그런 일을 할 수 있습니까?

도움이 되었습니까?

해결책

JavaScript에서는 다음과 같이 결합 할 수 있어야합니다.

var left_right = MyEnum.Left | MyEnum.Right;

그러면 테스트는 예제에서 정확히 동일합니다.

if ( (left_right & MyEnum.Left) == MyEnum.Left) {...}

다른 팁

당신은 그냥 사용해야합니다 비트 운영자 :

var myEnum = {
  left: 1,
  right: 2,
  top: 4,
  bottom: 8
}

var myConfig = myEnum.left | myEnum.right;

if (myConfig & myEnum.right) {
  // right flag is set
}

더 많은 정보:

예, Bitwise 산술은 JavaScript에서 작동합니다. JavaScript는 Number 부동 소수점 유형으로 구현되는 데이터 유형. 그러나 값은 변환됩니다 서명 비트 동작에 대한 32 비트 값. 31 비트 이상을 사용하려고하지 않는 한 괜찮을 것입니다.

나는 비트 마스크 열거를 사용하여 벌 로징 구동도를 제어하려는 공통 사용 사례를 보여주는 예를 만들려고 노력했습니다. 그것은 미국의 JavaScript 비트 측면 작업을 보여줍니다. JSFiddle에서 참조하십시오

/*
 * Demonstration of how a Flags enum can be simulated in JavaScript and 
 * Used to control what gets logged based on user passed value
 */

// A Flags Enum (sort-of)
var LogLevels = {
    NONE: 0,
    INFO: 1,
    TRACE: 2,
    DEBUG: 4,
    WARN: 8,
    ERROR: 16,
    FATAL: 32
};

// Initialize
var currLogLevel = LogLevels.NONE;

// User Sets a log level
var logLevel = LogLevels.WARN;

// Convert the configured logLvel to a bit-masked enum value
switch (logLevel) {
    case LogLevels.INFO:
        currLogLevel = LogLevels.INFO | LogLevels.TRACE | LogLevels.DEBUG | LogLevels.WARN | LogLevels.ERROR | LogLevels.FATAL;
        break;
    case LogLevels.TRACE:
        currLogLevel = LogLevels.TRACE | LogLevels.DEBUG | LogLevels.WARN | LogLevels.ERROR | LogLevels.FATAL;
        break;
    case LogLevels.DEBUG:
        currLogLevel = LogLevels.DEBUG | LogLevels.WARN | LogLevels.ERROR | LogLevels.FATAL;
        break;
    case LogLevels.WARN:
        currLogLevel = LogLevels.WARN | LogLevels.ERROR | LogLevels.FATAL;
        break;
    case LogLevels.ERROR:
    case LogLevels.FATAL:
    default:
        currLogLevel = LogLevels.ERROR | LogLevels.FATAL;
}

// Example: log verbosity set to WARN, so this would NOT be logged
if ((currLogLevel & LogLevels.DEBUG) == LogLevels.DEBUG) {
    console.log("log DEBUG");
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top