2015-10-18 87 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;