Javascript 访问对象时返回未定义,而它';不是

Javascript 访问对象时返回未定义,而它';不是,javascript,Javascript,我对JavaScript相当陌生,但我是一名长期程序员,我就是不明白发生了什么 我有这个: var MainTable = { "k1": 0, "k2": 9, "k3": 20 }; 当我想访问特定元素时: var index = "k1"; var value = MainTable[index]; 现在,由于一个我完全无法理解的原因,它每次都返回undefined而不是0。我已经做了大约两个小时了,我就是不明白 谢谢 使用完整代码编辑: // These sh

我对JavaScript相当陌生,但我是一名长期程序员,我就是不明白发生了什么

我有这个:

var MainTable = {
    "k1": 0,
    "k2": 9,
    "k3": 20
};
当我想访问特定元素时:

var index = "k1";
var value = MainTable[index];
现在,由于一个我完全无法理解的原因,它每次都返回undefined而不是0。我已经做了大约两个小时了,我就是不明白

谢谢

使用完整代码编辑:

// These shouldn't be modified
var maxEPoints = 29;
var maxGold = 50;
var hudBarWidth_HR = 650; // 650 is for hr (px)
var hudBarWidth_LR = 350;

var IN_COMBAT = false;
var IN_COMBAT_WAITING = false;

var WolfDamageTable = 
{
    "m11_1": 99,
    "m11_2": 99,
    "m11_3": 8,
    "m11_4": 8,
    "m11_5": 7,
    "m11_6": 6,
    "m11_7": 5,
    "m11_8": 4,
    "m11_9": 3,
    "m11_10": 0,
};

var EnemyDamageTable =
{
    "m11_1": 0,
    "m11_2": 0,
    "m11_3": 0,
    "m11_4": 0,
    "m11_5": 1,
    "m11_6": 2,
    "m11_7": 3,
    "m11_8": 4,
    "m11_9": 5,
    "m11_10": 6,
};


function ComputeCombatDamage( aPoints, ePoints, skill, endurance )
{
    var ratio = ( aPoints - parseInt( skill ) ).toString();
    var absRatio = ( aPoints - parseInt( skill ) );
    var randVal = GIMME_A_RANDOM().toString();

    $( "td#tableWolfSkill" ).html( aPoints.toString() );
    $( "td#tableWolfEndurance" ).html( ePoints.toString() );
    $( "td#ratio" ).html( ratio.toString() + " / " + randVal.toString() );

    // ... code where I process the string index

    var eDamage = EnemyDamageTable[eIndex]; // -> problem
    var wDamage = WolfDamageTable[wIndex];

    var wolfEndurance = ePoints - wDamage;
    var enemyEndurance = endurance - eDamage; 

    var barWidth = ( wolfEndurance / maxEPoints ) * hudBarWidth_HR;


    IN_COMBAT = wolfEndurance > 0 && enemyEndurance > 0;

    return IN_COMBAT;
}

/*********************************************************************
 * custom function to initiate the battle sequence
 *********************************************************************/
function LoadBattle()
{
    IN_COMBAT = true;

    var aPoints = 0;
    var ePoints = 0;
    var gold = 0;

    var name = $( "span#enemyName" ).html();
    var skill = $( "span#enemySkill" ).html();
    var endurance = $( "span#enemyEndurance" ).html();

    if( skill.length == 0 ||
        endurance.length == 0 )
    {
        alert( "Content is not properly formated for combat!" );
        return;
    }

    window.location = "#fight_start";
    // Set up the table before showing it
    $( "td#tableEnemyName" ).html( name );
    $( "td#tableEnemySkill" ).html( skill );
    $( "td#tableEnemyEndurance" ).html( endurance );

    var keepGoing = true;

    while( IN_COMBAT )
    {
        if( typeof( Storage ) !== "undefined" )
        {
            aPoints = localStorage.aPoints;
            ePoints = localStorage.ePoints;
        }
        keepGoing = ComputeCombatDamage( aPoints, ePoints, skill, endurance );
        //endurance = $( "td#enemyResultEndurance" ).html();
        if( keepGoing == false )
        {
            break;
        }
        //WaitCombat();
    }
}
在我看来,这个错误似乎来自

var eDamage = EnemyDamageTable[eIndex];
var wDamage = WolfDamageTable[wIndex];
函数中计算战斗伤害


我现在已尽可能地将其最小化。

wIndex
eIndex
未定义。我可以详细说明,但这应该说明一切。

“现在,由于一个我完全无法理解的原因,它返回undefined而不是0”与上面的代码不同,它没有。您需要显示更多的代码,因为您忽略了实际导致该问题的位。我认为您的
MainTable
在这两者之间的其他地方被覆盖。另外:这不是数组,而是对象。您的代码工作正常。您是否检查了某些开发人员工具的情况?您没有说明目标环境是什么,但在最常见的环境(浏览器或NodeJ)中,
WaitInCombat
函数将永远不会返回,并且(在浏览器上)会导致浏览器出错。浏览器(目前在NodeJS中)上的JavaScript是单线程的。如果您的代码执行繁忙的等待循环,比如您的
WaitInCombat
,那么就只会发生这种情况。不会运行其他代码。我想不出一个环境中繁忙的等待循环是一个好主意(它只会消耗CPU),但在单线程环境中这是一个特别糟糕的主意。