设置键和变量在一行中

时间:2014-02-26 22:38:20

标签: javascript

我想在同一行/语句中设置一个选项,同时键和值都在同一行:

以下是如何在多行上执行此操作:

var  options = {}
  ,  key = "foo", value = "bar"
  ;
options[key] = value;
myFunction( options ); // object is { "foo" : "bar" }

这就是我想要做的事情:

myFunction({key:value}); // object is { "key" : "bar" }

哪个不行。有没有办法在一行中做到这一点?

5 个答案:

答案 0 :(得分:3)

  

有没有办法在一行中做到这一点?

不确定

myFunction((obj = {}, obj[key] = value, obj));

这是comma operator在这里工作。它从左到右计算每个表达式,并返回最后一个表达式的值。请注意,表达式在括号(...)内,否则逗号将被解释为参数分隔符。

缺点是obj 全局,总体来说它的可读性较差。


基本上,技术上可行,但你不应该这样做。在多行中执行此操作没有任何问题,并且无法使用对象文字并设置动态密钥。

答案 1 :(得分:3)

jsFiddle Demo

您可以使用带有new的{​​{1}}关键字构建对象。

function

答案 2 :(得分:2)

myFunction( JSON.parse('{"'+key+'":"'+value+'"}') )

如果keyvalue包含需要转义的引号或字符,请执行

myFunction( JSON.parse('{'+JSON.stringify(key)+':'+JSON.stringify(value)+'}') )

感谢Felix和zerkms。

答案 3 :(得分:0)

我的专业意见是你不应该这样做。

将多个任务添加到单个表达式,行,语句(无论如何调用)会使代码可读性变差。如果你想在一行中表达复杂的东西,那么为它编写一个函数。当您在团队中工作时,牺牲代码可读性不是一种选择。开发和维护难以理解的代码很难......

答案 4 :(得分:0)

你们对这个答案有什么看法?

Object.prototype.set = function(key,value){ this[key] = value; return this };

myFunction( ({}).set( key, value ));