Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.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中发生了什么?_Javascript - Fatal编程技术网

什么';这段Javascript中发生了什么?

什么';这段Javascript中发生了什么?,javascript,Javascript,有人能解释一下下面的Javascript在构造函数方面做了什么,以及它是如何使用/调用变量a中定义的函数的吗 <script> a = 'alert("Hi");' {}["apple"]["constructor"]["constructor"](a)(); </script> a='警报(“Hi”);' {}[“苹果”][“构造函数”][“构造函数”][“构造函数”](a)(); 谢谢 第一个{}只是一个诱饵,它被解释为一个空块并被忽略。所以我们有 ["appl

有人能解释一下下面的Javascript在构造函数方面做了什么,以及它是如何使用/调用变量a中定义的函数的吗

<script>
a = 'alert("Hi");'
{}["apple"]["constructor"]["constructor"](a)();
</script>

a='警报(“Hi”);'
{}[“苹果”][“构造函数”][“构造函数”][“构造函数”](a)();

谢谢

第一个
{}
只是一个诱饵,它被解释为一个空块并被忽略。所以我们有

["apple"]["constructor"]["constructor"](a)()
那是

[].constructor.constructor(a)()
Function(a)()
(function() { alert('Hi') })()
那是

Array.constructor(a)()
那是

[].constructor.constructor(a)()
Function(a)()
(function() { alert('Hi') })()
那是

[].constructor.constructor(a)()
Function(a)()
(function() { alert('Hi') })()
构造函数
通过原型解析,结构如下:


这与
Object.apple.constructor.constructor(a)()相同
{}[“apple”][“constructor”][“constructor”]
返回可以与eval相同的函数。@Jai它不一样,因为在这种情况下,
{}
不是对象,而是空块。如果它是对象,它将抛出异常
无法读取未定义的
@hacker的属性“constructor”,而不是字符串而是数组。尽管我很困惑它是如何从
数组。constructor(a)(
函数(a)(
@PaulFitzgerald:我希望pic能澄清that@georg这张照片确实有用,但我还是不太明白。你会不会碰巧有一个链接,指向某个更详细解释这一点的地方?如果没有,不用担心。我可以找到我自己,但不是100%确定我会寻找什么for@PaulFitzgerald:这些内容在中有描述,但不是特别可读。另外,不要忘记
“;”
a='alert(“Hi”);之后的
-如果在第一行后面没有
{}
,则在语句末尾。