减少JavaScript中的多个变量

时间:2015-10-18 10:32:02

标签: javascript

我可以在JavaScript中减少多个 变量吗? 例如,如果我有3个变量:

     var foo = 10;
     var boo = 15;
     var lol = 15;

     //Normal syntax:
     foo -=1; // -> foo will be 9
     boo -=1; // -> boo will be 14
     lol -=1; // -> lol will be 14

是否可以选择一行?还是更好的语法? 例如:foo ,boo ,lol -=1;

2 个答案:

答案 0 :(得分:0)

不,你不能。标准JavaScript没有提供这个机会。更糟糕的是,你几乎无法在功能上做到这一点。 lol -=1;lol--;只是lol = lol - 1;的捷径。因此,如果您尝试编写一个函数,它会为您执行此操作,例如:

function reduce() {
  for (var i = 0; i < arguments.length; i++) {
    arguments[i] = arguments[i] - 1;
  }
}

然后将其称为

reduce(foo, bar, lol);

它只是因为传递了原始数字(而不是引用)而无法工作。每次更改函数内部的数字时,它都不会更改数字本身,但会返回一个新数字。

这可以通过使用一些对象来存储所有变量来解决,例如:

var vars = {
  foo: 12,
  bar: 13,
  lol: 14
};

function reduce(variables) {
  for (variable in variables) {
    if (variables.hasOwnProperty(variable)) {
      variables[variable] -= 1;
    }
  }

  return variables;
}

reduce(vars);

但这不是3个变量的列表,这是你附加它们的一种上下文。

如果您在全局范围内执行这些操作(例如,在窗口中没有将函数包装在函数中),您可以将上述两种方式合并为一个(Window存储所有var声明的变量):< / p>

function reduce(vars) {
  var varslist = vars.split(',');

  for (var i = 0; i < varslist.length; i++) {
    window[varslist[i]] -= 1;
  }
}

reduce('foo,boo,lol');

但是一旦你将它移动到某个子上下文,它就不会再工作了。它看起来也很讨厌。我宁愿选择第二个解决方案,vars对象代表你的变量上下文。

答案 1 :(得分:0)

您可以使用一行进行操作,但仍需重复操作:

foo--, bar--, lol--;

了解comma operator。它可能很有用,但它通常不太可读。

我甚至不会将var语句合并为1:

var foo = 1, bar = 2, lol = 3;

因为如果var发生变化,整行就会改变。

我曾经这样做过:

var foo = 1,
    bar = 2,
    lol = 3;

但这也是不好的做法,因为删除foolol只会改变1行以上(因为var前缀或;后缀)

有时冗长是好的:

var foo = 10;
var boo = 15;
var lol = 15;

foo -= 1;
boo -= 1;
lol -= 1;