eval(...)不能处理包含函数的对象

时间:2014-04-15 19:41:23

标签: javascript eval strict

eval声明一个带函数的数组的字符串工作正常。但是,eval声明具有函数的对象的字符串不起作用。谁能告诉我为什么?

This JSFiddle以下代码演示了此问题:

"use strict";

// functions in arrays are ok:
var x = "[ function() {}, [function() {}] ]";
var o = eval(x);
console.log(o[1]);

// functions in objects are not ok (for some reason):
var y = "{a: function() {}, b: [function() {}] }";
var o = eval(y);
console.log(o['a']);

只有第二个eval会造成麻烦。

在Chrome中,我得到:

  

Uncaught SyntaxError:在严格模式代码中,函数只能在顶层声明或在另一个函数中立即声明。

在IE 11中,我得到:

  

预期标识符

1 个答案:

答案 0 :(得分:1)

问题不在你想象的地方。

更改

var y = "{a: function() {}, b: [function() {}] }";

var y = "({a: function() {}, b: [function() {}] })";

或将通话更改为eval

var o = eval('('+y+')');

避免eval认为你传递了一个块而不是一个对象。