2013-03-21 103 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"); 
}