在代码混淆器算法中,我看到了使用以下语法的一个步骤:
0["constructor"]["constructor"](
0["constructor"]["constructor"](
"return \"alert()\""
)();
)();
我的javascript知识不再帮助我......
typeof 0 => number
typeof 0["constructor"] => function
typeof 0["constructor"]["constructor"] => function
请问,你能解释一下js解释器是做什么来“处理”这段代码的吗?我无法理解它可以以哪种方式工作!
并且:结尾的“()”是什么意思?我无法理解语法
我试图玩萤火虫 js 控制台
执行
0["constructor"]["constructor"](
"return \"alert()\""
)();
控制台输出"alert()"
, (带双引号)
我被认为相当于一个评估,但事实并非如此。运行这个:
eval( "return \"alert()\"" );
只是导致一个SyntaxError: return not in function
.
执行这个问题的第一个片段,完全等同于简单地执行 a alert()
,所以我理解内部代码认为文本就像一个函数体并执行它,所以内部正在返回"alert()"
;外层读取了最后一个字符串,认为是函数体,所以执行代码,结果触发了alert。
但是,我重复一遍。它的语法是什么意思?最后的“()”有什么用?
0["constructor"]["constructor"](
"some code to be evaluted"
)();