不同的javascript对象键看起来是相同的

不同的javascript对象键看起来是相同的,javascript,object,key,Javascript,Object,Key,我使用对象作为映射,并使用模式映射[obj.href]=obj将对象存储在其中 我期待着重复的钥匙,但奇怪的事情发生了: 我有两个完全不同(每个字段)的对象,它们用不同的键存储,但是当第三个对象的键与第一个对象的键相同时,查找将返回第二个对象(用不同的键存储),当我查找返回对象的href时,我再次得到相同的对象,就好像这两个键是等效的一样 根据SO和其他一些帖子,任何有效字符串都可以是对象中的键,并且不需要转义任何字符,这是我担心的,因为所有的“/”和“#” 我确信这只是我代码中的一个简单错误,

我使用对象作为映射,并使用模式映射[obj.href]=obj将对象存储在其中

我期待着重复的钥匙,但奇怪的事情发生了:

我有两个完全不同(每个字段)的对象,它们用不同的键存储,但是当第三个对象的键与第一个对象的键相同时,查找将返回第二个对象(用不同的键存储),当我查找返回对象的href时,我再次得到相同的对象,就好像这两个键是等效的一样

根据SO和其他一些帖子,任何有效字符串都可以是对象中的键,并且不需要转义任何字符,这是我担心的,因为所有的“/”和“#”

我确信这只是我代码中的一个简单错误,我看不到它,因为现在是早上8点,我整晚都没睡。如果您能帮我发现,我们将不胜感激

function parseSpellsList($)
{
    var spellsList = {};

     $("ul[class|='link'],ul[class$='level']").each(function() {
        var obj, spell_type, links, i, link, a, span, prevObj, hashKey;
        obj = {};
        links = this.children;
        for (i=0; i<links.length; i++) {
            link = links[i];
            a = link.children[0];
            obj.href = a.href.replace("file:///home/ckot/rpg_app/", "").replace("scripts/", "");
            obj.name = a.innerHTML.replace("<b>", "").replace("</b>", "");
            hashKey = obj.href;
            prevObj = null;
             if ( !(spellsList.hasOwnProperty(hashKey))) {
                 // debug code
                if ("Blood Blaze" === obj.name || "Vomit Swarm" === obj.name) {
                    console.log("storing " + JSON.stringify(obj, null, "    ") + " with hashKey: " + hashKey);
                }
                spellsList[hashKey] = obj;
            } else {
                console.log("\nWARNING: hashKey " + hashKey + " already exists");
                prevObj = spellsList[hashKey];
                console.log("object we which to store with hashKey: " + hashKey + "\n" + JSON.stringify(obj, null, "    ")) ;
                console.log("object retrieved with hashKey: " + hashKey + "\n" + JSON.stringify(prevObj, null, "    "));
                console.log("object retrieved with hashKey: " + prevObj.href + "\n" + JSON.stringify(spellsList[prevObj.href], null, "    ") + "\n");
            }
        }
    });
}
编辑:

仅针对我使用的某些上下文:

节点v0.10.22
npm v1.4.24
以及npm模块:
jsdom v1.0.0-pre.3
jquery v2.1.1“,

nvm,我在$each()的开头初始化obj,而不是在嵌套的for循环中:(


我想我只需要睡一会儿。

尝试创建一个可以共享的测试环境。好的平台是liveweave.com、codepen.io和jsfiddle。net@Max不幸的是,我不得不使用cloud9,因为我需要一个node js环境。除了使用cloud9用户名或电子邮件地址之外,我无法明确地共享,但是我可以手动批准用户作为y连接到您只需要在命令行中运行./parseSpellList
storing {
    "href": "advancedRaceGuide/featuredRaces/orcs.html#blood-blaze",
    "name": "Blood Blaze"
} with hashKey: advancedRaceGuide/featuredRaces/orcs.html#blood-blaze
storing {
    "href": "advanced/spells/vomitSwarm.html#vomit-swarm",
    "name": "Vomit Swarm"
} with hashKey: advanced/spells/vomitSwarm.html#vomit-swarm

WARNING: hashKey advancedRaceGuide/featuredRaces/orcs.html#blood-blaze already exists
object we which to store with hashKey: advancedRaceGuide/featuredRaces/orcs.html#blood-blaze
{
    "href": "advancedRaceGuide/featuredRaces/orcs.html#blood-blaze",
    "name": "Blood Blaze"
}
object retrieved with hashKey: advancedRaceGuide/featuredRaces/orcs.html#blood-blaze
{
    "href": "advanced/spells/vomitSwarm.html#vomit-swarm",
    "name": "Vomit Swarm"
}
object retrieved with hashKey: advanced/spells/vomitSwarm.html#vomit-swarm
{
    "href": "advanced/spells/vomitSwarm.html#vomit-swarm",
    "name": "Vomit Swarm"
}