Javascript按位问题

Javascript按位问题,javascript,bit-manipulation,Javascript,Bit Manipulation,我在javascript中使用位时遇到问题。我不知道我是不是走错了路。但事情是这样的 我有四大类。id为1,2,4,8的 “我的对象”中的项具有其所属类别总数的属性。即 { item: { name: 'lorem', c: 7 }} //member of category 1,2,4 我有一个变量(n),它包含活动类别的组合数量。在这种情况下,如果所有类别都处于活动状态,则编号为15 现在,如果我将n改为11(类别1,2,8处于活动状态),我将尝试确定哪些项目处于活动状态。像这样 for

我在javascript中使用位时遇到问题。我不知道我是不是走错了路。但事情是这样的

我有四大类。id为1,2,4,8的

“我的对象”中的项具有其所属类别总数的属性。即

{ item: { name: 'lorem', c: 7 }} //member of category 1,2,4
我有一个变量(n),它包含活动类别的组合数量。在这种情况下,如果所有类别都处于活动状态,则编号为15

现在,如果我将n改为11(类别1,2,8处于活动状态),我将尝试确定哪些项目处于活动状态。像这样

for (x in items) {
            item = items[x];
            if ((n & item.c) == item.c) {
                //active
            } else {
                //inactive
            }
        }
这不能正常工作。例如,如果item.c是9(1,8的成员),if语句将返回true。应该如此。但如果.c项为7(1,2,4的成员),则if语句返回false。这是我的问题。7应返回true,因为类别1和类别2仍处于活动状态

还是这是错误的方法

…fredrik

((n&item.c)=item.c)
表示“如果在item.c中设置的所有位也在n中设置,则为true”。如果项.c为7,n为11,则在项.c中设置位4,但在n中未设置位4,因此结果为假


听起来你想要
if(n&item.c){…}

但是假设item.c只取1,2,4或8作为它的值,那么
if((n&item.c)==item.c)
是否等同于
if(n&item.c)
。如果您不关心项目的顺序,它可能在这里工作,但是如果有人摆弄
对象
原型,它也会爆炸。坚持旧式C
for(var i=0;ithanks)。但这是一个从服务器端加载的JSON对象。关于旧式for循环,您应该将长度设置为一个var。因为对于它执行的每个循环,我会查看数组,然后查看长度。特别是当您必须计算长度时。var i,l=items.length;for(i=0;i