Ich versuche zu überprüfen, ob eine "Variable" in es6 konstant ist:
%Vor%Aber wenn ich die Funktion eval () verwende, wird kein Fehler ausgegeben.
%Vor%Und ich mache die Konstante lokal, die Funktion eval wirft einen Fehler wie erwartet.
%Vor%Und wenn ich die Funktion eval () benutze, die bewirkt, dass sie nicht wie erwartet einen Fehler auslöst. Was haben die Funktionen eval () hier gemacht? Ich führe es in Knoten v6.2.2
%Vor%Interessanterweise schließe ich eval () mit if (false) ein, es wird auch keinen Fehler verursachen.
%Vor%Jeder kann mir den Grund sagen?
Ist das ein Fehler in JavaScript?
Und wie kann ich den globalen konstanten Variablenfehler abfangen?
Die Tatsache, dass eval("a = 2;")
in Ihrem Code keine TypeError
enthält, sieht in V8 (der JavaScript-Engine in Chrome) wie ein Fehler aus.
const
erstellt eine strikte Bindung über die Spezifikationsoperation CreateImmutableBinding (siehe Schritt 16.bi1 von GlobalDeclarationInstantiation ).
Bei der Zuweisung zu einer unveränderlichen Bindung ( a = 2
) soll eine TypeError
von SetMutableBinding
wenn entweder 1. Der Code ist im strikten Modus oder 2. Die Bindung ist eine strikte Bindung.
Also in deinem Code, der eval
nicht benutzt, liegst du im lockeren Modus, aber es wirft trotzdem ein TypeError
ab, weil die Bindung streng ist. Aber V8 scheint nicht zu überprüfen, ob die Bindung streng ist, wenn Sie eval("a = 2;")
ausführen. (SpiderMonkey [Firefox] tut das und wirft die TypeError
; genauso wie JScript in IE11. Ich habe Edge nicht zur Hand, um Chakra zu überprüfen.)
Sie können V8 veranlassen, den Fehler zu verursachen, indem Sie den Code in eval
strict machen:
Tags und Links javascript