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中,我得到:
预期标识符
答案 0 :(得分:1)
问题不在你想象的地方。
更改
var y = "{a: function() {}, b: [function() {}] }";
到
var y = "({a: function() {}, b: [function() {}] })";
或将通话更改为eval
至
var o = eval('('+y+')');
避免eval
认为你传递了一个块而不是一个对象。