【问题标题】:Javascript eval() not working with passed stringJavascript eval()不适用于传递的字符串
【发布时间】:2012-09-11 22:41:12
【问题描述】:

我的代码sn-p:

function receive(mag)
{
    var text = eval(mag);
    alert(text);
}

receive('["magnolia,", ["Magnolia (Flower)"], [], [], [], [], [], [[3, 19019, "INV_MAG_39 ", 5]]]');

当我在示例中传递字符串时(如上所示),eval(mag) 不起作用。 但如果我直接这样做:

function receive(mag)
{
    var text = eval('["magnolia,", ["Magnolia (Flower)"], [], [], [], [], [], [[3, 19019, "INV_MAG_39 ", 5]]]');
    alert(text);
}

确实有效。 有谁知道出了什么问题/我怎样才能让它与传递的变量一起工作?

【问题讨论】:

  • “行不通”是什么意思?第一个版本实际上发生了什么? (您是否在控制台中遇到任何错误?)
  • 不行,别再用eval()了。
  • 尝试使用JSON.parse 而不是eval
  • 因为 eval 会在字符串中执行 anything ,而且因为它只对 eval 外部数据有意义,所以它可能非常危险。
  • 你的代码在这里工作:jsfiddle.net/HvrzK

标签: javascript eval


【解决方案1】:

我认为您缺少括号:

eval('(' + mag + ')')

但为什么不使用 JSON.parse??

var text = JSON.parse(mag);

【讨论】:

  • 为什么在没有括号的情况下直接包含字符串时括号很重要? (甚至“损坏”的代码在这里也能正常工作:jsfiddle.net/HvrzK - 用 Chrome 测试。)
  • 好吧,我只包含了类似代码,因为原件太长无法发布。但你明白我的意思;它在实际代码中所做的是使用 ajax 获取字符串并将其传递给函数。
  • @nnnnnn:是的,你也是正确的数组。无论如何,正确的语法是 eval('(' + mag + ')')
  • 什么不起作用?你遇到了什么错误?语法是正确的,所以如果你没有得到你想要的结果,问题就出在其他地方。
  • @xtra:检查 Web 浏览器的控制台日志。它会为您提供传递给receive 函数的确切字符串的确切错误原因。您示例中的字符串确实有效,因此错误可能发生在不同的字符串上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-07
  • 2017-01-06
  • 1970-01-01
相关资源
最近更新 更多