Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Set.constructor`alert\x28document.domain\x29``含义_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript Set.constructor`alert\x28document.domain\x29``含义

Javascript Set.constructor`alert\x28document.domain\x29``含义,javascript,ecmascript-6,Javascript,Ecmascript 6,我在学习XSS时遇到了这种在浏览器中使用的语法。有人能告诉我为什么它会执行得很详细吗 Set.constructor`alert\x28document.domain\x29``` 那很有趣。我们有 Set.constructor`alert(...)``` 让我们先考虑这一部分: Set.constructor`alert(...)` 是,相当于以下函数调用(前提是backticks中没有${…}占位符): Set是一个类,它是JS中的一个函数,因此Set.constructor是fu

我在学习XSS时遇到了这种在浏览器中使用的语法。有人能告诉我为什么它会执行得很详细吗

Set.constructor`alert\x28document.domain\x29```

那很有趣。我们有

 Set.constructor`alert(...)```
让我们先考虑这一部分:

Set.constructor`alert(...)`
是,相当于以下函数调用(前提是backticks中没有
${…}
占位符):

Set
是一个类,它是JS中的一个函数,因此
Set.constructor
function
,也就是说,上面与

 Function(['alert(...)'])
或者,由于
函数
将其参数转换为字符串

 Function('alert(...)')
它根据给定的文本内容动态创建函数

现在,我们又有两个倒勾,因此我们的整体表达式变成:

Function('alert(...)')``
这也是一个带标记的文本,相当于一个函数调用

Function('alert(...)')([''])
它用一个垃圾参数调用我们新创建的函数


换句话说,这是一种创造性的方法来评估事物。

它使用一个标记的模板文本来调用函数它触发警报的步骤是什么?@royatirek:啊,我没有注意到还有两个。。。编辑。嘿,乔治,我还有两个疑问-1。首先,让一个{constructor(abc){this.abc=abc;}}}运行这个A.constructor('alert(“Hi”)')在控制台中显示ƒanonymous(){alert(“Hi”)}。为什么它不显示完整的变量初始化。为什么它在呼叫alert2。运行.constructor()('alert(“Hi”)')不起作用,但运行.constructor('alert(“Hi”))()起作用,但据我所说,我们在这两种情况下做的都是一样的。@royatirek:有趣的问题,但在评论中有点难以回答。想发布一个新问题吗?
Function('alert(...)')([''])