从对象中的对象访问数据时出现问题(javascript)

从对象中的对象访问数据时出现问题(javascript),javascript,object,syntax,nested,Javascript,Object,Syntax,Nested,我一直在创建一个口袋妖怪统计计算器,使用html、css和javascript供我个人使用。代码主要是有效的,我的问题是基于它的特定部分 var Natures = { 'Adamant':{'pos':'Atk', 'neg':'SpA'} } 上面是一个存储自然属性数据的对象示例(每个自然属性增加一个属性10%,减少另一个属性相同)。“自然”值是具有属性的对象,这些属性表示它们正在增加和减少的统计信息。我的问题在于以下代码: if(Natures.hasOwnProperty(nature

我一直在创建一个口袋妖怪统计计算器,使用html、css和javascript供我个人使用。代码主要是有效的,我的问题是基于它的特定部分

var Natures = { 'Adamant':{'pos':'Atk', 'neg':'SpA'} }
上面是一个存储自然属性数据的对象示例(每个自然属性增加一个属性10%,减少另一个属性相同)。“自然”值是具有属性的对象,这些属性表示它们正在增加和减少的统计信息。我的问题在于以下代码:

if(Natures.hasOwnProperty(nature)) {
    var plus = eval(Natures.nature['pos']);
    var minus = eval(Natures.nature['neg']);
    base.plus = Math.floor(base.plus*1.1);
    base.minus = Math.floor(base.minus*0.9);
}
if语句位于一个函数内,该函数修改一个对象(base)并输出其值(6个stats中的每个值一个)。if语句检查Natures对象的特定性质(作为函数参数给出的字符串)

经过一些测试,我确信if语句是有效的。问题在于接下来的两行。它们用于访问大自然的pos和neg值,并将其存储为加号和减号。eval()在那里,因此我可以使用加号和减号来访问和修改基的适当值,这些值不是字符串

我已经检查过了,没有发现我的语法有任何问题。我也确信我已经在上面发布的代码中隔离了这个问题。该函数在Natures中运行良好。另外,我只在Chrome(版本40.0.2214.115)中测试过这个,所以它可能是浏览器。

有几个问题:

首先,更改这些行

var plus = eval(Natures.nature['pos']);
var minus = eval(Natures.nature['neg']);
base.plus = Math.floor(base.plus*1.1);
base.minus = Math.floor(base.minus*0.9);


其次,
eval('Atk')
eval('SpA')
将不起作用,除非在其他地方定义它们。

不,您不想使用
eval
。当然不是。你已经有效地回答了我的问题。作为后续,这是否意味着eval()不能用于替代特定类型属性?eval('Atk')应该等于一个非字符串对象键(用于多个对象)。我一直在使用对象文字符号。如果我使用了对象构造函数方法,那么这个方法会有效吗?eval是邪恶的。使用它不是一种好的做法。从你的例子中,我看不出你为什么要使用它,为什么不简单地将你需要的值放在对象本身中(也许我遗漏了一些东西,因为我从来没有对口袋妖怪感兴趣)。我不再对我展示给你的部分使用eval,但我需要在程序的另一部分中使用它。程序根据用户输入的几个因素计算口袋妖怪的统计数据。一个因素是口袋妖怪的基本属性,我将其存储为一个对象。用户选择pokemon,程序获取select选项的值,并使用它调用相应的对象并获取基本统计数据。该值是一个字符串,因此我必须使用eval将其转换为我可以使用它调用对象的内容。在这里,我想我也可以使用eval调用对象键。
var plus = eval(Natures[nature]['pos']);
var minus = eval(Natures[nature]['neg']);
base[plus] = Math.floor(base[plus]*1.1);
base[minus] = Math.floor(base[minus]*0.9);