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