当我在玩 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();
这种不一致来自哪里,或者在创建对象时模板字符串的处理方式不同?