我有一個小型的庫,它接受字符串並構造它們之外的對象。例如,'-key val'
創建了{"key": "val"}
。然而,我試圖擴展輸入字符串的語法以獲取簡單的對象文字,例如'-key "{key: 'val'}"'
,它應該產生{"key" : {"key" : "val"}}
但是結果只有{"key" : "val"}
。Javascript:如何使用eval返回或解析對象字面值?
爲什麼eval只返回「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」'。要將其評估爲對象文字,您需要將其包裝在括號中。這基本上就是你的修補程序所做的,儘管是以一種複雜的方式。相反,只要執行'eval('('+ arg +')')'。 – 2016-07-22 03:02:14