【问题标题】:javascript object variable key [duplicate]javascript对象变量键[重复]
【发布时间】:2011-08-29 14:41:50
【问题描述】:

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

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

这部分导致错误:

self.settings.direction

我的语法错误的任何想法? 谢谢

【问题讨论】:

标签: javascript jquery


【解决方案1】:

AFAIK,你不能。对象文字符号中冒号前面的任何内容都将自动解释为字符串。您需要事先构造对象,并使用方括号表示法。

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

【讨论】:

  • 很容易忘记它是可用的
【解决方案2】:

请记住,您在大括号之间定义了一个对象。您不能在属性名称中使用点。假设位移属性是在其他地方设置的,这对你有用:

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

【讨论】:

    【解决方案3】:

    您可以使用 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
    

    【讨论】:

    • .toString() 调用是不必要的。变量a 已经是一个字符串。您需要做的就是删除引号:jsfiddle.net/FJCFW.
    【解决方案4】:

    如果值也是一个字符串,你可以使用 JSON.parse:

    var a = 'key';
    var b = 'value';
    var test = JSON.parse('{"' + a + '":"' + b + '"}"');
    //test = {key: 'value'}
    

    【讨论】:

    • +1:丑陋和有用的部分。非常方便。
    • 这是什么黑魔法!?他们应该在 Coffeescript 中包含此方法以添加可变键超能力。
    • 转义双引号可能是个好主意,例如:JSON.parse('{\"' + a + '\":\"' + b + '\"}')
    猜你喜欢
    • 2012-09-21
    • 2020-02-18
    • 2011-12-11
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    • 2015-12-31
    • 2018-07-24
    相关资源
    最近更新 更多