Перечислимые флаги в JavaScript

ДЖЕДАЙ JVCL JCL с Sourceforge.net

46
задан Andrey 25 October 2013 в 19:21
поделиться

3 ответа

В javascript вы должны иметь возможность комбинировать их как:

var left_right = MyEnum.Left | MyEnum.Right;

Тогда тестирование будет таким же, как в вашем примере

if ( (left_right & MyEnum.Left) == MyEnum.Left) {...}
50
ответ дан 26 November 2019 в 20:05
поделиться

Вам просто нужно использовать побитовые операторы:

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

var myConfig = myEnum.left | myEnum.right;

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

Дополнительная информация:

77
ответ дан 26 November 2019 в 20:05
поделиться

Да, побитовая арифметика работает в Javascript. Вы должны быть осторожны с этим, потому что Javascript имеет только тип данных Number , который реализован как тип с плавающей запятой. Но значения преобразуются в знаковые 32-битные значения для побитовых операций. Так что пока вы не пытаетесь использовать более 31 бита, все будет в порядке.

11
ответ дан 26 November 2019 в 20:05
поделиться