我可以使用字符串引用变量吗?

Isa*_*bow 6 javascript

说我有以下JS:

var foo_index = 123;
var bar_index = 456;
Run Code Online (Sandbox Code Playgroud)

以下HTML:

<div id="foo"></div>
<div id="bar"></div>
Run Code Online (Sandbox Code Playgroud)

然后我想说这个:

thisIndex = this.id + '_index'
Run Code Online (Sandbox Code Playgroud)

我想thisIndex成为一个号码.如何将字符串(这正是变量名称)转换为变量?

SLa*_*aks 11

你应该把变量放在一个对象中,如下所示:

var indices = { 
    foo: 123,
    bar: 456
};

var thisIndex = indices[this.id];
Run Code Online (Sandbox Code Playgroud)

此代码使用JSON语法和对象文字来定义具有两个属性的对象,并用于[]按名称访问属性.

你也可以写

var indices = new Object;
indices.foo = 123;
indices["bar"] = 456;
Run Code Online (Sandbox Code Playgroud)

  • JSON不仅仅意味着JavaScript Object Notation吗?"JSON语法"是一种冗余的首字母缩略词,但由于对象符号正是您在声明中使用的,因此您首先将其称为JSON是正确的. (3认同)
  • 你完全倒退了.它是使用Javascript语法子集的JSON.这是一个Javascript对象,它与JSON没有任何关系. (2认同)
  • @SLaks:这是一个对象文字.语法早在JSON存在之前就存在了,所以最近才开始(错误地)将它称为JSON语法. (2认同)

rek*_*o_t 10

您可以.如果foo_index和bar_index是全局变量,您只需执行以下操作:

var thisIndex = window[this.id + '_index'];
Run Code Online (Sandbox Code Playgroud)


tar*_*sch 5

你可以尝试使用eval函数:

http://www.w3schools.com/jsref/jsref_eval.asp

它完全符合您的需求.

  • 如果您正在考虑使用*eval()*,那么可能有更好的方法来做您正在尝试做的事情(在这种情况下,SLaks的回答).[Eval is Evil](http://blogs.msdn.com/b/ericlippert/archive/2003/11/01/53329.aspx),Eric Lippert对这个主题进行了很好的阅读. (4认同)
  • 但非常,_very_,慢慢地. (3认同)