Ich habe eine kleine Bibliothek, die Strings nimmt und Objekte daraus konstruiert. Zum Beispiel '-key val'
erstellt {"key": "val"}
. Ich versuche jedoch, die Syntax der Eingabezeichenfolge zu erweitern, um auch einfache Objektliterale zu verwenden, z. B. '-key "{key: 'val'}"'
, die {"key" : {"key" : "val"}}
ergeben sollte, jedoch ist das Ergebnis nur {"key" : "val"}
.Javascript: Wie man ein Objektliteral mit Eval zurückgibt oder analysiert?
Warum gibt eval nur "val" zurück und nicht das gesamte Objekt? Und gibt es eine sicherere Alternative als meine Lösung?
// my code before the fix
var arg = '{key: "val"}'
var result = eval(arg)
// result is "val"
Unten ist meine Lösung, die sehr unsicher ist!
const fmt = require('util').format
var arg = '{key: "val"}'
var result = eval(fmt('()=>(%s)', arg))()
// result is { key : "val" }
verwenden sollten Die '{}' wird als ein Block behandelt, und 'Schlüssel' als eine Bezeichnung, so wird dies zu" val "' ausgewertet. Um es als Objektliteral auswerten zu können, müssen Sie es in runde Klammern setzen. Das ist im Wesentlichen, was Ihr Fix, wenn auch in einer verschlungenen Art und Weise tut. Stattdessen tun Sie einfach 'eval ('(' + arg + ')')'. –