在为CTF反向处理一些混淆的JavaScript代码时,我遇到了以下语法:
/
它在数组的末尾推“ 5”,这看起来很合逻辑,但是我只是不明白为什么这种语法有效,因为我没有设法找到关于它的任何内容(不在Mozilla Developer Network上,而不是W3C website上,而最新的ECMAScript specification太密集了,我无法理解。)
我认为这与数组是对象的特例有关,但是我对JavaScript不够了解,无法弄清楚。
答案 0 :(得分:3)
在JavaScript中,您可以使用点表示法或方括号来访问对象属性。因此object.propertyname
等效于object['propertyname']
。通常,当属性名称是动态计算的或不是有效的标识符(例如,包含特殊字符)时,我们使用方括号。但是,没有什么禁止在其他情况下使用它。因此array['push']
等效于array.push
,因此array['push'](5)
等效于array.push(5)
。
答案 1 :(得分:0)
array['push']('5');
转换为:
const array = [];
array.push('5');
由于push
始终是数组上的方法,因此可以通过['push']
之类的关联来访问它,也可以直接作为属性来访问它。