2015-10-18 75 views
2

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

 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;

+0

不是真的,没有。 –

+0

他们不平等。 –

+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商店内的所有变种声明的变量):

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

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

reduce('foo,boo,lol'); 

但是,只要您将其移至某个子上下文,它将不再起作用。此外它看起来非常讨厌。我宁愿用代表变量上下文的vars对象来选择第二个解决方案。

0

你可以用一条线做,但你还是要重复操作:有关comma operator

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

阅读。它可能很有用,但它通常不太可读。

我甚至不会合并报表var到1:

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

,因为如果变量的变化,整条生产线的变化。

我曾经这样做:

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;