JavaScript对象变量键

28

我正在为Jquery创建一个插件,需要将一个变量作为对象的键。

$(selector).animate({self.settings.direction: '+='+self.displacement+'px'}, "slow" , function () {});

这部分导致了错误:

self.settings.direction

有任何想法,我的语法哪里错了吗? 谢谢


我认为以下链接展示了一个我用underscore想出来的相当不错的解决方案。它再简单不过啦!https://dev59.com/lW035IYBdhLWcg3wE7xr#30608422 - rashadb
4个回答

85

据我所知,你不能这样做。在对象字面量表示法中,冒号前面的任何内容都会被自动解释为字符串。因此,您需要事先构建对象,并使用方括号表示法。

var options = {}
options[self.settings.direction] = '+=' + self.displacement + 'px';
$(selector).animate(options, "slow" , function () {});

编辑:现在您可以:

const prop = "foo"
const bad = { prop: "bar" } // { prop: "bar" }
const good = { [prop]: "bar" } // { foo: "bar" }

所以,您想知道如何从JavaScript中的数组中删除特定值吗?

$(selector).animate({ [self.settings.direction]: '+='+self.displacement+'px'}, "slow" , function () {});

2
容易忘记这是可用的。 - pizza247

11
如果该值也是字符串,您可以使用JSON.parse:
var a = 'key';
var b = 'value';
var test = JSON.parse('{"' + a + '":"' + b + '"}"');
//test = {key: 'value'}

+1:同样丑陋和有用。非常方便。 - msanford
这是什么黑魔法!?他们应该在Coffeescript中包含这种方法,以添加变量键超能力。 - Matt Fletcher
可能最好转义双引号,例如:JSON.parse('{\"' + a + '\":\"' + b + '\"}') - Demircan Celebi

7
你可以使用 toString() 方法来访问变量所定义的字符串。因此:
var obj = new Object;

obj.a = 0;
obj.b = 1;

var a = "b";

obj["a"]; // will output 0
obj[a.toString()] // will output 1

6
.toString()的调用是不必要的。变量a已经是一个字符串了。你只需要删除引号:http://jsfiddle.net/FJCFW/。 - Travesty3

1
请记住,在花括号之间定义了一个对象。您不能在属性名称中使用点。假设位移属性在先前的某个地方设置,这将对您起作用:
$(selector).animate({settings: {direction: '+='+self.displacement+'px'}}, "slow" , function () {})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接