这种在js中有效保存真/假选项的方法吗?

时间:2011-06-06 15:44:08

标签: javascript binary performance options storage

在某些地方,您可以选择保存为数字的选项。例如,在设置文件权限时,为每组用户使用0到7之间的值传递它们。 数字的二进制表示中的每个位表示三个权限之一:读取,写入和执行,因此值为7,二进制表示为111表示文件可以是红色,写入和执行,而a值5表示由于二进制表示101,文件只能为红色并执行。

旁注:我不是操作系统如何管理文件的专家,我的解释可能是错误的,但我确信表示这些选项的二进制数的基本思想是在那里实现的。

我现在想知道,如果使用javascript在二进制文件中存储true / false选项是否有效。为此,我将按如下方式创建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");
    }
}

我的问题是,这是一种保存选项的有效方法,如果是,是否有更有效的方法将二进制转换为数字,获取特定选项或所有选项?

3 个答案:

答案 0 :(得分:2)

如果你想在JavaScript中完成类似的事情,我建议实际使用按位运算符,即&amp;和|。

例如:

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

答案 1 :(得分:1)

只需将它们存储为数组即可。这看起来像浪费时间。你已经看过像这样存储的选项,因为它们被用来“掩盖”事物。

答案 2 :(得分:0)

这是否是存储选项的有效方式取决于您将要使用它的区域。如果您正在创建一个插件并将其暴露给用户以便使用此方法初始化您的插件,则可能会使他/她感到困惑。