gpt4 book ai didi

javascript - 高级语法 : "0[constructor][constructor]()()" - How does it works to evaluate code?

转载 作者:行者123 更新时间:2023-11-30 12:57:10 25 4
gpt4 key购买 nike

在代码混淆器算法中,我看到一个步骤使用了这种语法:

0["constructor"]["constructor"](
0["constructor"]["constructor"](
"return \"alert()\""
)();
)();

我对 javascript 的了解对我没有任何帮助...

typeof 0                               => number
typeof 0["constructor"] => function
typeof 0["constructor"]["constructor"] => function

请您解释一下js 解释器如何“处理”这段代码?我无法理解它以何种方式工作!

还有:结尾的“()”是什么意思?我不明白语法

我试过玩firebug js控制台

正在执行

0["constructor"]["constructor"](
"return \"alert()\""
)();

控制台输出"alert()",(带双引号)

我认为它等同于 eval,但事实并非如此。运行这个:

eval( "return \"alert()\"" );

只会导致 SyntaxError: return not in function

执行这个问题的第一个片段,完全等同于简单地执行一个alert(),所以我理解inner代码认为文本就像一个函数体并执行它,所以 inner 返回 "alert()";外部读取最后一个字符串,认为它是一个函数体,所以执行代码,结果是触发了警报。

但是,我再说一遍。 语法是什么意思?末尾的“()”有什么用?

0["constructor"]["constructor"](
"some code to be evaluted"
)();

最佳答案

此代码正在查找 Function constructor , 调用它以创建一个新函数,并将参数作为函数体的代码,然后立即调用该函数:

Function("Some code to be evaluated")()

它会执行两次,一次使用 String 文字 "return\"alert()\"",然后再次使用 return来自第一个函数的值作为第二个函数的主体。

var result = Function("Some code to be evaluated")()
Function(result)()

并且,它通过第一个从 0 中找到 Number,然后从 Number 中找到 Function 来获得 Function :

console.log(0["constructor"] === Number); // true
console.log(Number["constructor"] === Function); // true

关于javascript - 高级语法 : "0[constructor][constructor]()()" - How does it works to evaluate code?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18635387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com