Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript组合二进制标志_Javascript_Titanium_Appcelerator - Fatal编程技术网

Javascript组合二进制标志

Javascript组合二进制标志,javascript,titanium,appcelerator,Javascript,Titanium,Appcelerator,我试图将javascript二进制标志与我的var定义内联,但我的代码抛出了一个异常“找不到变量:A”。有没有办法做到这一点 var flag = { A: 1, B: 2, C: 4, D: 8, All: A | B | C | D, }; 在声明包含A的对象时,不能使用A 如果要使用这些值,需要稍后声明(或初始化)All字段,如下所示: var flag = { A: 1, B: 2, C: 4, D: 8, };

我试图将javascript二进制标志与我的var定义内联,但我的代码抛出了一个异常“找不到变量:A”。有没有办法做到这一点

var flag = {
    A: 1,
    B: 2,
    C: 4,
    D: 8,
    All: A | B | C | D,
};

在声明包含
A
的对象时,不能使用
A

如果要使用这些值,需要稍后声明(或初始化)
All
字段,如下所示:

var flag = {
    A: 1,
    B: 2,
    C: 4,
    D: 8,
};
flag.All = flag.A | flag.B | flag.C | flag.D;
或者,您可以使用函数作为范围来封装变量,并执行以下操作:

var flag = (function () {
  var A = 1, B = 2, C = 4, D = 8;
  return {A: A, B: B, C: C, D: D, All: A|B|C|D};
}());
ES6对象速记使其更具吸引力:

var flag = (function () {
  var A = 1, B = 2, C = 4, D = 8;
  return {A, B, C, D, All: A|B|C|D};
}());
如果
All
是您的常见模式,则可以生成:

flag.All = Object.keys(flag).reduce(function (p, c) { 
  return p | flag[c]; 
}, 0);
使用ES6,您还可以缩短时间:

flag.All = Object.keys(flag).reduce((p, c) => (p | flag[c]), 0);

如果ES6对您可用,请尝试声明枚举。上述创建
All
值的方法可以使用它,但它提供了更多您可能期望的传统枚举语义(尤其是只读的)。

在声明包含
A
的对象时,不能使用
A

如果要使用这些值,需要稍后声明(或初始化)
All
字段,如下所示:

var flag = {
    A: 1,
    B: 2,
    C: 4,
    D: 8,
};
flag.All = flag.A | flag.B | flag.C | flag.D;
或者,您可以使用函数作为范围来封装变量,并执行以下操作:

var flag = (function () {
  var A = 1, B = 2, C = 4, D = 8;
  return {A: A, B: B, C: C, D: D, All: A|B|C|D};
}());
ES6对象速记使其更具吸引力:

var flag = (function () {
  var A = 1, B = 2, C = 4, D = 8;
  return {A, B, C, D, All: A|B|C|D};
}());
如果
All
是您的常见模式,则可以生成:

flag.All = Object.keys(flag).reduce(function (p, c) { 
  return p | flag[c]; 
}, 0);
使用ES6,您还可以缩短时间:

flag.All = Object.keys(flag).reduce((p, c) => (p | flag[c]), 0);

如果ES6对您可用,请尝试声明枚举。上面创建
All
值的方法可以使用它,但它提供了更多您可能期望的传统枚举语义(尤其是只读的)。

这不是您的数学问题,而是您如何声明事物的问题。在声明包含
A
的对象时,不能使用
A
。这不是数学问题,而是如何声明的问题。在声明包含
A
的对象时,不能使用
A
。回答得很好。我没有全部试过。第一个可以工作,但当我有许多标志和描述性名称时,它会变长。喜欢减少选项!这是我将添加到工具箱中的一个。谢谢,回答得很好。我没有全部试过。第一个可以工作,但当我有许多标志和描述性名称时,它会变长。喜欢减少选项!这是我将添加到工具箱中的一个。谢谢