эффективен ли этот способ сохранения параметров true / false в js? - PullRequest
0 голосов
/ 06 июня 2011

В некоторых местах вы увидите опции, сохраненные в виде чисел. Например, при настройке прав доступа к файлам вы передаете их, используя значение в диапазоне от 0 до 7 для каждой группы пользователей. Каждый из битов в двоичном представлении числа представляет одно из трех разрешений: чтение, запись и выполнение, поэтому значение 7 с двоичным представлением 111 означает, что файл может быть красным, записываться и выполняться, тогда как значение 5 означает, что файл может быть только красным и выполняться из-за двоичного представления 101.

примечание: я не эксперт в области того, как операционные системы управляют файлами, моё объяснение может быть неверным, но я уверен, что основная идея двоичных чисел, представляющих эти параметры, реализована там.

Что мне сейчас интересно, если эффективно хранить опции 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");
    }
}

У меня вопрос: это эффективный способ сохранения опций, и если это так, есть ли более эффективный способ преобразования двоичного числа в число и получения определенной опции или всех опций?

Ответы [ 3 ]

2 голосов
/ 06 июня 2011

Если вы хотите выполнить что-то подобное в 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
1 голос
/ 06 июня 2011

Просто сохраните их как массив.Это выглядит как пустая трата времени.Вы видели параметры, сохраненные таким образом, так как они использовались для «маскировки» вещей.

0 голосов
/ 06 июня 2011

, является ли это эффективным способом хранения опций, зависит от области, где вы собираетесь его использовать.Если вы создаете плагин и выставляете его пользователю таким образом, чтобы инициализировать ваш плагин с помощью этого метода, это может его запутать.

...