【问题标题】:Eval() = Unexpected token : errorEval() = 意外令牌:错误
【发布时间】:2011-12-20 14:10:03
【问题描述】:

我尝试了这个简单的 JavaScript 代码:

eval('{"Topics":["toto","tata","titi"]}')

例如,在 Chrome 控制台中,这会返回

SyntaxError: Unexpected token :

我在JSONLint 上尝试了 JSON,它是有效的。

你看到错误了吗?

【问题讨论】:

    标签: javascript json eval


    【解决方案1】:

    第一:不要使用 eval。

    第二个。只用 eval 做某事,好被评价。比如:

    eval('var topics = {"Topics":["toto","tata","titi"]}');
    

    【讨论】:

      【解决方案2】:

      FWIW,请改用JSON.parse。比eval 更安全。

      【讨论】:

        【解决方案3】:

        因为那是在评估一个对象。 eval() 要求您传入语法上有效的 javascript,而您所做的只是传入一个裸对象。调用应该更像:

        eval('var x = {"Topics":etc...}');
        

        【讨论】:

          【解决方案4】:

          因为eval 不强制一个表达式上下文并且提供的字符串是一个无效 JavaScript 程序,因此前三个标记(以及如何看待它们)是:

          {            // <-- beginning of a block, and NOT an Object literal
          "Topics"     // <-- string value, okay (note this is NOT a label)
          :            // <-- huh? expecting ";" or "}" or an operator, etc.
          

          编码愉快。

          【讨论】:

          • 请问为什么 eval('function(){}') 也会抛出异常?
          • @BiAiB 出于与上述相同的原因 :) eval 的内容在 statement 上下文中运行,因此它被视为 FunctionDeclaration 语法结构。产生的错误是“SyntaxError: function statement requires a name”。给它一个名字 (eval('function f(){}'); f()) 或强制它进入 FunctionExpression 构造 (f = eval('(function(){alert("hi")})'); f())。见es5.github.com/x13.html
          • 谢谢!对我来说棘手的部分是因为像'3'这样的字符串被正确评估,而不是'function(){}'。第二个不能作为 ExpressionStatement 评估:an ExpressionStatement cannot start with the function keyword because that might make it ambiguous with a FunctionDeclaration (es5.github.com/x12.html#x12.4)
          【解决方案5】:

          使用:

          function evalJson(jsArray){ eval("function x(){ return "+ jsArray +"; }"); return x(); }
          
          var yourJson =evalJson('{"Topics":["toto","tata","titi"]}');
          
          console.log(yourJson.Topics[1]); // print 'tata''
          

          【讨论】:

          • 对我有用..不知道这是否是最佳做法,但它让我启动并运行
          【解决方案6】:

          你必须这样写

          eval('('+stringJson+')' );
          

          将字符串转换为对象

          希望我能帮上忙!

          【讨论】:

          • 这是唯一适用于我的解决方案。谢谢!
          • 谢谢,这比接受的答案要好得多。很高兴指出 eval 是邪恶的 :),但这仍然回答了问题。
          • 我在评估普通的 javascript 函数时遇到了同样的问题,这解决了我的问题。为什么/如何将表达式括在括号中解决问题?
          • 这对我有用
          【解决方案7】:

          如果您使用的是 JQuery,请使用函数 $.parseJSON(),为我工作,遇到同样的问题

          【讨论】:

            【解决方案8】:

            如果你想创建一个数组,请使用下面的代码

            var jsonObject = eval('(' +"["+ response + "]"+')');
            

            【讨论】:

              猜你喜欢
              • 2017-07-08
              • 2015-11-19
              • 2018-08-27
              • 2014-12-07
              • 2016-08-10
              • 2013-02-11
              • 2013-10-26
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多