Javascript: 如何 return 或使用 eval 解析对象字面量?
Javascript: How to return or parse an object literal with eval?
我有一个小库,可以获取字符串并从中构造对象。例如 '-key val'
创建 {"key": "val"}
。然而,我正在尝试扩展输入字符串的语法以也采用简单的对象文字,例如 '-key "{key: 'val'}"'
应该产生 {"key" : {"key" : "val"}}
但结果仅为 {"key" : "val"}
。
为什么只评估 return "val" 而不是整个对象?还有比我的解决方案更安全的替代方案吗?
// my code before the fix
var arg = '{key: "val"}'
var result = eval(arg)
// result is "val"
下面是我的修复,非常不安全!
const fmt = require('util').format
var arg = '{key: "val"}'
var result = eval(fmt('()=>(%s)', arg))()
// result is { key : "val" }
{key: "val"}
是块,key:
是标签。
如果你想将它解析为对象初始值设定项,请在需要表达式的地方使用它,例如
({key: "val"})
0,{key: "val"}
[{key: "val"}][0]
var arg = '{key: "val"}'
var result = eval(arg)
eval解析时,'{'会被认为是代码块,key:
是标签
所以我认为你应该使用
var arg = '{key:"val"}'
var result = eval('('+arg+')')
//result {key:"val"}
我有一个小库,可以获取字符串并从中构造对象。例如 '-key val'
创建 {"key": "val"}
。然而,我正在尝试扩展输入字符串的语法以也采用简单的对象文字,例如 '-key "{key: 'val'}"'
应该产生 {"key" : {"key" : "val"}}
但结果仅为 {"key" : "val"}
。
为什么只评估 return "val" 而不是整个对象?还有比我的解决方案更安全的替代方案吗?
// my code before the fix
var arg = '{key: "val"}'
var result = eval(arg)
// result is "val"
下面是我的修复,非常不安全!
const fmt = require('util').format
var arg = '{key: "val"}'
var result = eval(fmt('()=>(%s)', arg))()
// result is { key : "val" }
{key: "val"}
是块,key:
是标签。
如果你想将它解析为对象初始值设定项,请在需要表达式的地方使用它,例如
({key: "val"})
0,{key: "val"}
[{key: "val"}][0]
var arg = '{key: "val"}'
var result = eval(arg)
eval解析时,'{'会被认为是代码块,key:
是标签
所以我认为你应该使用
var arg = '{key:"val"}'
var result = eval('('+arg+')')
//result {key:"val"}