JavaScript, если условие помогает - PullRequest
2 голосов
/ 17 мая 2011

У меня есть следующий javascript if условия на странице .asp:

<%@language="javascript"%>

var operator = new String("opstr")
operator.permissions = 2

if((operator.permissions & 1) == 1)
    // ... 
if((operator.permissions & 2) == 2)
    // ...

Может кто-нибудь объяснить, что происходит в условиях if, перечисленных выше?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 17 мая 2011

Прочтите статью MDC о побитовых операторах

if((operator.permissions & 1) == 1)

Немного по-другому.1 & 1 === 1, 2 & 1 === 0, 3 & 1 === 1

if((operator.permissions & 2) == 2)

Еще один бит, равный 1 & 2 === 0, 2 & 2 === 2, 3 & 2 === 2

3 голосов
/ 17 мая 2011

В этом конкретном фрагменте кода всегда будет выполняться второй оператор if. Это потому, что operator.permissions & 2 всегда будет иметь значение 2 (так как переменная была установлена ​​на 2 ранее).

& немного бит AND. 2 - это двоичный код 10 (в 32-битном формате это будет 0000 0000 0000 0000 0000 0000 0000 0010). Когда вы делаете побитное AND, значения конвертируются в двоичные (32-битный со старшим порядковым номером со знаком), и каждый бит одного операнда AND изменяется вместе с другим. Когда вы AND два равных значения, вы получите одно и то же значение в результате.

Несколько примеров (я использую 4-битные значения для удобства чтения):

1 & 1 = 0001 & 0001 = 0001 = 1
2 & 1 = 0010 & 0001 = 0000 = 0
3 & 1 = 0011 & 0001 = 0001 = 1
...
5 & 1 = 0101 & 0001 = 0001 = 1

и

1 & 2 = 0001 & 0010 = 0000 = 0
2 & 2 = 0010 & 0010 = 0010 = 2
3 & 2 = 0011 & 0010 = 0010 = 2
...
6 & 2 = 0110 & 0010 = 0010 = 2
1 голос
/ 17 мая 2011

Это побитовые операторы.Читайте здесь: http://www.devguru.com/technologies/ecmascript/quickref/bitwise_operators.html для более.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...