为什么JS eval() return 只取一个对象的值
Why does JS eval() return only the value of an object
如果我这样做:
var x = eval('{a:"b"});
console.log(x); // -> "b"
我得到的只是对象 ("b") 中的值,而不是 key/property 或整个对象本身,这很奇怪。
但是当我这样做时:
var x = eval('(function self(){return {a:"b"}})()');
console.log('x'); // -> {a:'b'}
现在它似乎给了我我所期望的,整个对象。但这是为什么呢?为什么我需要将它包装在一个(自执行的)函数中?
我正在考虑使用 eval 从字符串创建一些对象,但需要更好地了解它是如何工作的。
那是因为 {a:"b"}
语句原样表示以下内容:
后者是产生结果的唯一表达式。
在 AST 浏览器中也是如此:https://astexplorer.net/#/gist/909bebf...
对于return一个对象,你需要先把它变成一个表达式,比如:把它包在括号里:eval('({a:"b"})')
但是 "I am thinking of using eval to create some objects from strings" 的整个想法听起来很可疑。
如果我这样做:
var x = eval('{a:"b"});
console.log(x); // -> "b"
我得到的只是对象 ("b") 中的值,而不是 key/property 或整个对象本身,这很奇怪。
但是当我这样做时:
var x = eval('(function self(){return {a:"b"}})()');
console.log('x'); // -> {a:'b'}
现在它似乎给了我我所期望的,整个对象。但这是为什么呢?为什么我需要将它包装在一个(自执行的)函数中?
我正在考虑使用 eval 从字符串创建一些对象,但需要更好地了解它是如何工作的。
那是因为 {a:"b"}
语句原样表示以下内容:
后者是产生结果的唯一表达式。
在 AST 浏览器中也是如此:https://astexplorer.net/#/gist/909bebf...
对于return一个对象,你需要先把它变成一个表达式,比如:把它包在括号里:eval('({a:"b"})')
但是 "I am thinking of using eval to create some objects from strings" 的整个想法听起来很可疑。