Javascript 模运算符前的双水平线

Javascript 模运算符前的双水平线,javascript,modulus,Javascript,Modulus,我知道模运算符的作用。但是,在“n--%2”中,双线是做什么的呢?这应该很简单,但我被卡住了 函数padIt(str,n){ 而(n>0){ str=n--%2?'*'+str:str+'*'; } 返回str; } 文件编写(padIt(“a”,10))n--返回n的值,然后将其递减 var result = n-- % 2; 相当于 var result = n % 2; n = n - 1; 它是一个类似于您可能熟悉的操作符++。它的目的是在返回所述值后,将值递减1。如果减数写在值之

我知道模运算符的作用。但是,在“n--%2”中,双线是做什么的呢?这应该很简单,但我被卡住了

函数padIt(str,n){ 而(n>0){ str=n--%2?'*'+str:str+'*'; } 返回str; } 文件编写(padIt(“a”,10))
n--
返回n的值,然后将其递减

var result = n-- % 2;
相当于

var result = n % 2;
n = n - 1;

它是一个类似于您可能熟悉的操作符
++
。它的目的是在返回所述值后,将值递减1。如果减数写在值之前,则减量将在返回值之前发生

var a = 12;
console.log(--a); //=> 11
与:

var a = 12;
console.log(a--); //=> 12
// But if you use a below this code it's value will be 11.

我认为目前为止答案中缺少的是OP问题中的代码实际上相当精致,因为它利用了将减量和比较组合到同一行中。因为这是一个后缀减量,所以减量直到计算模运算符之后才会发生

这两个函数都将返回相同的值:

  n=10;
  n % 2; //0
---------------
  n=10;
  n-- % 2; //0
但将其设为前缀减量,或使用括号强制后缀减量器先求值将改变结果:

  n=10;
  --n % 2;  // 1
---------------
  n=10;
  (n--) % 2; // 1
重写OP问题中函数的更详细的方法是

function padIt(str, n) {
  while (n > 0) {
    str = n % 2 ? '*' + str : str + '*';
    n = n - 1;   //  This is the  decrementer fully written out 
  }
  return str;
}
不,它不会显著延长代码,但它确实节省了一行额外的代码。但更重要的是,找到这样聪明的小把戏很酷。为这个函数的作者干杯


对于演示

它是一个减量运算符