运行此JavaScript在Firefox 60.2中仅列出一个属性(“位置”),但还有许多其他属性,例如“ document.title”等。
window.console.log("List props: " + Object.keys(window.document).sort().join(' / '));
为什么这样?安全?从技术上讲这是怎么做的? 如何列出所有属性?
答案 0 :(得分:2)
Object.keys(o)
返回o
的自己的,可枚举的属性。
o
而不是在其prototype chain上定义的属性:在这种情况下,您期望的大多数键是在document
的{{3}}中的另一个对象上定义的:
document.hasOwnProperty("title"); // false
document.__proto__.__proto__.hasOwnProperty("title"); // true
document.__proto__.__proto__.propertyIsEnumerable("title"); // true
您可以使用for... in
循环来查找在对象或其原型链上定义的可枚举属性:
for (let key in window.document) {
console.log(key);
}
答案 1 :(得分:0)
我找不到它不能与window.document一起使用的正式原因,但是看来您也可以使用其他变量来重现此行为。
问题似乎是 Object.keys()
并没有从这些变量中返回所有内容。
如果您仍在尝试获取文档的所有属性,则仍然可以使用
var props = [];
for(var prop in window.document) {
props.push(prop);
}
console.log("List props: " + props.sort().join('/'));
与您的方法完全相同的事情。
答案 2 :(得分:0)
原因是 @IBAction func takeScreenShotTapped(_ sender: Any) {
let screenShot = snapshot(of: CGRect(x: 80, y: 80, width: 100, height: 100))
}
返回返回的字符串数组代表了给定对象的所有可枚举属性。
尝试此操作以查看文档的哪些属性可枚举
snapshot()
但是,如前一个答案所述,您可以使用for-in循环将数组中的所有属性排序并加入它们