查看此Javascript函数中的3行代码。假设y
始终是 String :
function example(x, y) {
var s = {};
s[y] = x;
return s;
}
请注意以下几点:
;
是否可以将3行代码压缩成一行?
答案 0 :(得分:4)
是的,有点丑陋的代码:
function example(x, y, s) {
return (s = {})[y] = x, s;
}
额外的参数s
没有传递给函数,它只是被声明为变量,所以你不需要额外的行var s;
。 (如果你没有在本地声明它就变成了一个全局变量,这是不好的做法。)
赋值s = {}
的值是指定的值,因此您可以进行赋值,然后继续使用表达式中的值。
逗号运算符返回最后一个值,例如(1,2)
返回值2
。这样,您可以向表达式添加, s
,使其返回s
。
另一种变体是使用s
作为for
循环中的变量,并退出循环:
function example(x, y) {
for(var s = {}; s[y] = x, true;) return s;
}
答案 1 :(得分:1)
使用function
作弊? :)
function example(x, y) {
return new function () { this[y] = x; };
}
答案 2 :(得分:1)
总有邪恶的评价:
function example(x, y) {
return eval('({' + y + ':"' + x + '"})');
}
但我仍然没有看到这一点。