2011-06-06 58 views
0

在某些地方,您可以將選項另存爲數字。例如,在設置文件權限時,您可以爲每組用戶使用0到7的值來傳遞它們。 數字的二進制表示中的每一位表示三個權限之一:讀,寫和執行,所以值爲7,二進制表示爲111表示文件可以是紅色,寫入和執行,而值爲5意味着該文件只能被紅色並執行,因爲二進制表示101.是這種方式保存js高效的真/假選項嗎?

備註:我不是操作系統如何管理文件的專家,我的解釋可能是錯誤的,但我確信代表這些選項的二進制數字的基本思想是在那裏實現的。

我現在想知道,如果它是有效的存儲true/false選項在二進制使用JavaScript。要做到這一點,我會按如下方式創建的JavaScript:

function OptionsGenerator(){ 
    //this method takes a number, and returns an array of options. 
    this.num2options = function(num){ 
     var str,len,opts=[]; 
     if(typeof num !== "number") return false; 
     str = num.toString(2); 
     len = str.length; 
     for(var i=0;i<len;i++){ 
      opts[i] = (str.charAt(i)==="1") ? true : false; 
     } 
     return opts; 
    } 
    //this function gets an array of options, and returns a number. 
    this.options2num = function(opts){ 
     var str = "",o,opt; 
     for(o in options){ 
      opt = (options[o]) ? 1 : 0; 
      str+=opt; 
     } 
     return parseInt(str,2); 
    } 
    //this function returns a specific option with an index ranging from 1 to the number of options set. takes 2 arguments: the first one is the set of options. This can either be a number or a string containing a binary representation of the number, the second parameter contains the index of the option. 
    this.getOption = function(num,optnum){ 
     var str; 
     if(typeof num === 'number') 
      str = num.toString(2); 
     else 
      str = num; 
     return (num.charAt(optnum-1)==="1"); 
    } 
} 

我的問題是,這是一種有效的方式來保存選項,如果是,是否有從二進制轉換爲數字的一個更有效的方法,並獲得一個特定的選項,或所有的選項?

回答

2

如果你想在JavaScript中完成類似的事情,我會推薦實際使用按位運算符,即&和|。

例如:

var read = 1; 
var write = 2; 
var execute = 4; 

var rw = read | write; 

var someUserPermission = 3; // or, var someUserPermission = read & write; 

// can read? 
console.log((someUserPermission & read) === read); // => true 
console.log((someUserPermission & write) === write); // => true 
console.log((someUserPermission & execute) === execute); // => false 
+0

它不應該是'RW =讀|寫'?由於二進制讀取爲「01」,寫入爲「10」,讀取和寫入將取消彼此,因爲沒有任何位對都是1. – bigblind 2011-06-06 16:02:31

+0

@Frederik你是對的,修復它。 – Matt 2011-06-06 16:15:11

1

只需將它們作爲數組存儲即可。這看起來像浪費時間。你已經看過這樣的選項,因爲它們被用來「掩蓋」事物。

0

是否這是存儲選項的有效方式取決於您要使用它的區域。如果您正在創建一個插件並將其公開給用戶,以便使用此方法初始化您的插件,則可能會使他/她感到困惑。

相關問題