我今天正在帮助对一个javascript片段进行去混淆,并且很惊讶地发现了这个:
document["write"]('obfuscated code here');
"写"也被混淆了,使得理解代码的意图稍微困难一些。
我之前从未见过将文档视为数组,我很好奇这是如何/为什么这样做的。还有其他可以以类似方式调用的函数吗?
答案 0 :(得分:3)
document
是一个Javascript对象(不是数组)。可以通过点(parent.child
)或下标(parent['child']
)语法访问对象字段。
您可以自己尝试一下:
var myObject = {
field: 'hello!'
}
console.log(myObject['field']);
console.log(myObject.field);
当您的字段名称不是有效的Javascript标识符时,下标语法很有用:
var myObject = {
'my-field': 'hello!'
}
console.log(myObject['my-field']); // Works as expected
console.log(myObject.my-field); // ReferenceError
console.log(myObject.'my-field'); // SyntaxError
答案 1 :(得分:2)
因为您可以将对象键作为['key']
以及.key
来访问。 "类"在javascript中只是对象。
请考虑以下事项:
var foo = {
bar: function() {
alert('We are here!');
}
};
foo.bar(); //The bar key of the object accessed using .key
foo['bar'](); //The bar key of the object accessed using ['key']
答案 2 :(得分:2)
因为document是javascript中的一个对象,一个DOM对象。 在javascript中,可以使用object.property或object [' property']
来访问属性。所以你可以把它写成
document.write(...);
OR
document['write'](...);
答案 3 :(得分:2)
在处理对象时,有两种表示法:dot(.
)和array([]
)。两者都将访问以点或命名
所以,如果你有像
这样的东西var obj = {
someproperty:"something",
somefunction:function(){}
};
obj.someproperty
和obj["someproperty"]
都会使用该名称引用对象的属性。
这当然也适用于数组,除非您不能使用点表示法来访问元素,因为数组只是对象。
var arr = [2,1,3];
console.log(arr[1])
arr["sort"]();
console.log(arr)
但是,您无法通过点表示法访问数组的元素
arr.1
会抛出错误