多字符串变量名称在Javascript

时间:2015-06-26 02:07:19

标签: javascript jquery

最近我在Javascript中发布了有关动态名称的信息。我继续尝试创建一个多字符串变量名称(组合一个字符串和一个变量来创建一个新的变量名称),它似乎不起作用。我很困惑,因为我正在做SO上的许多帖子所说的事情(所以我想无论如何)。

无论如何这里是我正在使用的动态变量:

var dynamic["replyupvote"+replyid] = false;

然后当我调用它时,我使用:

dynamic["replyupvote"+replyid]

所以我的问题是我哪里出错了?如果您想查看我的完整代码:

function replyupvote(replyid, upvotes, downvotes, votesclass, votesnumber) {
    var dynamic["replyupvote"+replyid] = false;
    return function() {
        if (dynamic["replyupvote"+replyid]) {
            dynamic["replyupvote"+replyid] = true;
        }
        else {
            $.ajax({
                url: "http://localhost/postin'/categories/votes.php",
                type: "POST",
                data: { 'itemid': replyid,
                        'userid': <?php echo $_SESSION["logged_in"]; ?>,
                        'action': "upvotes",
                        'type': "reply" },
                success: function() {
                    $("." + votesclass).css("color", "orange");
                    $("." + votesnumber).text(parseInt(upvotes - downvotes) + 1);
                }
            });
            dynamic["replyupvote"+replyid] = true;
        }
    }
}

此代码在我通过多字符串变量名称之前有效。那么我做错了什么?谢谢! :)

修改

我以为我应该把它扔进去。由于语法不正确,Javascript会抛出函数未定义的错误。

2 个答案:

答案 0 :(得分:1)

无论你在这里做什么都有意义,要动态创建对象的属性,你需要确保JS知道它是一个对象,而不是一个数组。因此,在尝试创建动态对象属性之前,请将dynamic显式声明为对象:

var dynamic = {};
dynamic["replyupvote"+replyid] = false;

至少应该摆脱语法错误。

答案 1 :(得分:1)

您必须先将动态设置为对象

var dynamic = {};
dynamic["replyupvote"+replyid] = false;

variableName [keyName] = value;是对象的语法。

在使用这种表示法之前,你必须告诉js你的变量是一个对象。