这个符号意味着什么"& ="?

时间:2016-06-10 00:08:14

标签: javascript

function ArithGeo(arr) {
  var diff = arr[1]-arr[0];
  var ratio = arr[1]/arr[0];
  var allRatioAreGood = true;
  var allDiffAreGood = true;
  for(var i = 2;i<arr.length;i++){
  //  console.log(arr[i]-arr[i-1] == diff);
    allRatioAreGood &= (arr[i]/arr[i-1] == ratio);
    allDiffAreGood &= (arr[i]-arr[i-1] == diff);
  }

  // code goes here
  if (allRatioAreGood){
    return "Geometric"
  }else if (allDiffAreGood){
      return "Arithmetic";
    }else {
    return -1
  }

}
console.log(ArithGeo([2, 4, 6, 7 , 8 ,10]));

&#39;&amp; =&#39;我们在for循环中使用它的意思是什么?它是如何工作的?有人可以解释一下吗?

另外,这两条线是如何工作的?

allRatioAreGood &= (arr[i]/arr[i-1] == ratio);
allDiffAreGood &= (arr[i]-arr[i-1] == diff);  

有人可以解释一下吗?

4 个答案:

答案 0 :(得分:5)

这是按位AND赋值。

在您的代码示例中,我们来看看第一个:

allRatioAreGood &= (arr[i]/arr[i-1] == ratio);

将值arr[i]arr[i-1]相互划分(生成比率),并测试该比率的相等性(使用==),生成truefalse值。

然后将该值按位与allRatioAreGood的现有值进行按位同步,这意味着如果allRatioAreGood的先前值为false(二进制0),那么所有将来的值for allRatioAreGood也会导致false(因为AND操作,0&amp; 1 = 0)。

结果是allRatioAreGoodallDiffAreGood计算出该数组中的所有值是否通过该测试的相等性,即,如果所有值都具有“良好比率”或“好的差异”。

然而,在这个特定的例子中,比较器正在检查比率和除法结果之间的相等性,这意味着因为除法运算的结果是浮点数,所以当其他数字不等于它时使用==进行测试。为了测试“足够接近等于”,需要使用epsilon。有关详细信息,请参阅此其他SO答案:What's wrong with using == to compare floats in Java?(不要担心这是Java与JavaScript,概念是相同的)。此外,这会变得更加复杂,因为在Javascript中,如果ratio或分割操作的结果为NaNInfinity,则在比较两者时,您将始终获得false号。

来自文档:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Assignment_Operators

按位AND赋值

按位AND赋值运算符使用两个操作数的二进制表示,对它们执行按位AND运算并将结果赋给变量。有关详细信息,请参阅按位AND运算符。

  

语法

     

接线员:x &= y含义:x = x & y

实施例

var bar = 5;
// 5:     00000000000000000000000000000101
// 2:     00000000000000000000000000000010
bar &= 2; // 0

答案 1 :(得分:1)

a &= b;

与说法相同:

a = a & b;

那么为什么要用这个表格呢?也许你有一个更复杂的表达,并希望明确aa是相同的左值:

obj.array[index].bits = obj.array[index].bits & mask;

obj.array[index].bits &= mask;

答案 2 :(得分:0)

它是一个按位运算符:

result = expression1 & expression2

a &= b;相当于a = a & b;

MDN Docs on bitwise operators

答案 3 :(得分:0)

按位AND分配,几乎如果你有5 & 3,则使用按位将数字转换为基数2,即00101&amp; 00011(前面多了0个)并得到1,因为这个数字都是1(真)

通常,&&是一个乘法,||是加法,按位相同,1 & 11 * 11 | 1是{{1}这是真实的(即使它仍然被认为是1 + 1 ..)