2013-03-21 100 views
0

我想检查一个标志是否在我的枚举值中设置。 我的代码有什么问题?JavaScript:枚举标志检查

JavaScript的代码

var flags = { 
    FOO: 1, 
    BAR: 2, 
    BAZ: 4, 
    FUM: 8, 
    ERROR: 65 
} 

var value = flags.FOO | flags.BAR; 

if (value & flags.ERROR){ 
    alert("ERROR IS SET, but this is not true"); 
} 
+1

65? 65是1 + 64。如果你想要位掩码值,那么'ERROR'必须是'64'。 – 2013-03-21 15:32:41

+0

现在按预期工作的是什么? 'value&flats.ERROR'共享'FOO'位(2^0),这意味着条件成立。 – Bergi 2013-03-21 15:36:11

回答

2

首先你的数值应是n^2:

var flags = { 
    UNKNOWN: 0, 
    FOO: 1, 
    BAR: 2, 
    BAZ: 4, 
    FUM: 8, 
    ERROR: 16 
} 

那么你的说法应该是:

if ((value & flags.ERROR) == flags.ERROR){ 
    alert("ERROR IS SET"); 
}