我想在同一行/语句中设置一个选项,同时键和值都在同一行:
以下是如何在多行上执行此操作:
var options = {}
, key = "foo", value = "bar"
;
options[key] = value;
myFunction( options ); // object is { "foo" : "bar" }
这就是我想要做的事情:
myFunction({key:value}); // object is { "key" : "bar" }
哪个不行。有没有办法在一行中做到这一点?
答案 0 :(得分:3)
有没有办法在一行中做到这一点?
不确定
myFunction((obj = {}, obj[key] = value, obj));
这是comma operator在这里工作。它从左到右计算每个表达式,并返回最后一个表达式的值。请注意,表达式在括号(...)
内,否则逗号将被解释为参数分隔符。
缺点是obj
全局,总体来说它的可读性较差。
基本上,技术上可行,但你不应该这样做。在多行中执行此操作没有任何问题,并且无法使用对象文字并设置动态密钥。
答案 1 :(得分:3)
答案 2 :(得分:2)
myFunction( JSON.parse('{"'+key+'":"'+value+'"}') )
如果key
或value
包含需要转义的引号或字符,请执行
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 ));