【问题标题】:Creating name of variable inside a for loop js not working [duplicate]在for循环js中创建变量名称不起作用[重复]
【发布时间】:2017-10-26 20:38:03
【问题描述】:

我正在做以下事情:

var var1 = 58;

for(var i=0;i<10;i++){
 if(("var"+i) == 58) {
 console.log("they are equal");
 }
}

有人能解释一下为什么 ("var" + i) 没有得到 58 的值吗?

我知道第一个是变量,也许第二个只是一个字符串,是吗?有什么办法可以实现吗?

我知道我可能会问一些对很多人来说很明显的问题,但我才刚刚开始。任何帮助表示赞赏! :)

【问题讨论】:

  • 变量不能以这种方式在javascript中访问。您可以将值存储在一个对象中(全局窗口对象,或者其他,然后以这种方式查找值)
  • 感谢您这么快的答复!我会仔细查看每个评论/答案(试试看),然后告诉你。

标签: javascript for-loop


【解决方案1】:

你应该使用一个对象来代替:

var data = {
  var1: 58
};

for(var i = 0; i < 10; i++){
 if(data["var" + i] == 58) {
   console.log("they are equal");
 }
}

UPD:@Alex suggested 一个带有window 而不是data 的变体,可以被视为全局对象。它适用于浏览器,但您应该知道“没有适用于窗口对象的公共标准”(MDN)。

【讨论】:

  • 或者更好,只是一个包含 10 个条目的数组。
  • @dhilt,您的回答确实有效!非常感谢你。现在为了知识,也许你知道我在哪里可以读到更多关于它的东西? (我会尽快接受正确的答案)。
  • @MrUnity 不确定我是否可以推荐关于“对象如何工作”或“对象是什么”的任何好的链接,它是 javascript 中非常基本的术语,您只需要开始从头开始学习。所以继续你的研究,在这里提出新问题,祝你好运!
  • @dhilt,哈哈哈你的回答让我笑了。谢谢,我会的。
  • @Bergi,我也会看看你的方法。谢谢!
【解决方案2】:
var var1 = 58;

for(var i=0 ;i<10;i++){
    if(window["var"+i] === 58) {
         console.log("they are equal");
    }
 }

【讨论】:

  • 这在 NodeJs 中不起作用。
  • 谢谢@Kenney。只是盲目复制。固定。
  • 当然它不会在 Node.js 中工作。那里没有定义全局窗口对象。只是想用最简单的例子来解释这个想法。
  • @Alex :thumbup 我也做了一个链接到你的答案。
【解决方案3】:

dhilt 的答案可能更好,但也许你没有能力改变其他变量。

var var1 = 58;

for (var i = 0; i < 10; i++) {
  var cur;
  try {
    cur = eval('var' + i);
  } catch (error) {
    cur = null;
  }
  if (cur === 58) {
    console.log("they are equal");
  }
}

【讨论】:

  • 你试过运行你的代码片段吗.. 不是说they are equal..
  • 这更多是因为堆栈溢出代码运行程序不允许 eval,这是有充分理由的。
  • 不,也不是这样。
  • 对不起@Keith。修好了。
  • 不错,.. 你也可以在没有 try catch 的情况下执行此操作,例如 -> eval("typeof var0 === 'undefined' ? undefined : var0") typeof on an undefined 不会抛出错误.. 显然将 @987654324 的 0 更改为@循环。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-05
  • 1970-01-01
  • 1970-01-01
  • 2010-11-06
  • 1970-01-01
  • 2019-11-28
相关资源
最近更新 更多