【问题标题】:How can I set a local variable using a string? [duplicate]如何使用字符串设置局部变量? [复制]
【发布时间】:2014-12-21 22:35:06
【问题描述】:

我需要在函数的 for 循环内设置一个局部变量,但是这个 var 的部分名称需要是一个字符串,更具体地说是一个数组索引。

看例子:

function MyFunction () {
    var strings = ["first","second","third","fourth"];

    for (var i = 0; i < strings.length; i++) {
        var "My_" + strings[i] + "_var" = "Hi, I'm the " + strings[i] + " var!";
    }
}

我知道这不是正确的方法,我只是在说明我想要做什么。我已经尝试过使用 window[]this[],但似乎 var 变成了全局变量。

【问题讨论】:

  • 为什么要这样创建变量?
  • 因为我想在我网站的不同元素上显示不同的消息,并且我正在尝试使用 for 循环和数组来缩小我的代码。
  • 这是一个非常糟糕的模式,只是为了缩小代码。对于代码缩小,请查看“JSmin”或“yui 压缩器”。
  • 你真的不想这样做;我建议在新问题中发布更多代码和您尝试解决的问题的解释,以获得更好的解决方案。
  • 重复的问题,即使它的标题不好,也能完美回答!

标签: javascript scope


【解决方案1】:

一种方法是使用对象,您可以使用括号表示法将对象的变量名设为字符串

 var obj = {};
 var name = ['first'];
 obj[name[0]]='whatever';

最后但不安全的方法是使用:

eval('var '+name+' = '+value+';');

Eval 将字符串评估为 javascript 命令,因此您可以使用动态命名的变量来组成变量。

【讨论】:

  • 使用eval 可能不安全。确保用户不能输入任何部分。
  • 任何人都可以在控制台上运行js,因此他们可以将任何字符串作为js代码运行,所以没有区别
  • 如果有人偶然发现这个答案,我将在生产网站上使用它,这可能会产生安全问题。你的回答完全正确,我只想提the problem of eval()
  • 是的,我知道您的担忧,但正如我所提到的,即使您没有放置任何 eval,javascript 代码也可以在您的网站上运行。 eval 的问题在于 php 等语言。
  • 我知道这已经过时了,但我把它留在这里,供以后阅读的人使用。很难想象。当然,任何人都可以在自己的控制台上运行代码。但问题是当您从数据库中获取和评估数据时,让 其他人 在用户机器上运行代码。想象一下 Twitter 使用eval() 来呈现推文。你在推特上发布了一些代码,突然间你在每个获得推特机器的人身上运行它。这就是 XSS 的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-28
  • 2020-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-10
相关资源
最近更新 更多