Wenn ich dies tun:Warum JS eval() geben nur den Wert eines Objekts
var x = eval('{a:"b"});
console.log(x); // -> "b"
alles, was ich ist der Wert in dem Objekt zu erhalten („b“), nicht der Schlüssel/Eigentum oder das ganze Objekt selbst, das ist komisch.
aber wenn ich dies tun:
var x = eval('(function self(){return {a:"b"}})()');
console.log('x'); // -> {a:'b'}
jetzt scheint es mir zu geben, was ich erwarten würde, das ganze Objekt. Aber warum ist das? Warum muss ich es in eine (selbstausführende) Funktion einbinden?
Ich denke Eval verwenden, um einige Objekte aus Strings zu erstellen, aber müssen besser wissen, wie das funktioniert.
Ich denke, die JS-Spezifikation definiert {} als "Codeblock", aber das ist selten im regulären JS-Code zu sehen - wie sieht ein "Codeblock" aus? Normalerweise ist ein Codeblock nur im Kontext einer Funktion. –
@AlexanderMills Sie sehen Blöcke die ganze Zeit 'if (wahr) {...}' - hier ist ein Codeblock. Viele Dinge akzeptieren eine einzelne Anweisung als "Operand", wo ein Block als "Container" für mehrere Anweisungen fungiert. – zerkms
@AlexanderMills: Es ist nicht Code-Blöcke, die selten sind, verwenden Sie Code-Blöcke in, wenn, für, während usw. Es ist Etiketten, die selten und fast nie verwendet werden – slebetman