4

XSS の課題をいじっていたときに、Javascript でテンプレート文字列 (括弧の代わりに ``) を使用して Function オブジェクトを作成すると、奇妙な動作に遭遇しました。

私が理解しているように、呼び出すとき

alert`1`

それは本質的に同じです

alert(["1"])

ここで説明されているように。テンプレート文字列を使用して Function オブジェクトが作成された場合を除いて、多くのケースをテストしましたが、どこでもそのように機能しました。

次のコードを実行する場合:

var x = new Function`alert(1)`;
console.log(x.constructor);

Object クラスのインスタンスは、コンストラクタ本体に alert(1) 関数を使用して作成されるため、すぐに実行されます。

私が正しく理解していれば、それは同じように実行されるべきです

var y = new Function(["alert(1)"]);
console.log(y.constructor)

本体に alert(1) を含む Function オブジェクトを返すだけで、このように呼び出すことができます

var y = new Function(["alert(1)"]);
y();

オブジェクトを作成するとき、この不一致はどこから来るのか、またはテンプレート文字列の扱いが異なるのでしょうか?

4

1 に答える 1