我可以在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;
答案 0 :(得分:0)
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;
但这也是不好的做法,因为删除foo
或lol
只会改变1行以上(因为var
前缀或;
后缀)
有时冗长是好的:
var foo = 10;
var boo = 15;
var lol = 15;
foo -= 1;
boo -= 1;
lol -= 1;