我正在尝试编写一个“for”循环,该循环将在 HTML 页面上打印出与“文档”对象(write、getElementById 等)关联的属性。不为实用,仅供学习。如果直接使用“document”对象,它工作正常,但如果我尝试使用一个值为“document”的变量,它将不起作用。这是我的代码:
<!DOCTYPE html>
<html>
<head>
<title>Title</title>
<script type="text/javascript">
function objProps() {
var myObj=prompt("Object?");
for (x in myObj) {
document.write(x + "<br />");
}
}
</script>
</head>
<body>
<button onclick="objProps()">Click me to see the properties of an object</button>
</body>
</html>
当我在提示中键入“document”时,我只得到数值,但如果我将 for 循环中的代码从“myObj”更改为“document”,它就会按预期工作。
非常感谢任何帮助。谢谢!
最佳答案
When I type "document" in the prompt, I just get numeric values
那是因为您在 string 上使用了 for-in
。 prompt
的返回值将是字符串 "document"
,而不是文档对象。
如果你想使用字符串名称来查找全局属性(document
是一个全局属性),你可以通过 window
全局来实现,它是对全局对象的引用:
for (x in window[myObj])
这仅适用于全局变量,并且仅适用于作为全局属性的全局变量(从 ES2015 开始,并非所有全局变量都成为全局对象的属性)。
还值得注意的是,for-in
仅访问可枚举 属性。我认为没有任何关于 document
的各种属性是否需要可枚举的规范,因此您的结果可能因浏览器而异。
您的代码正在成为 The Horror of Implicit Globals 的牺牲品(披露:链接到我贫血的小博客)。请记住声明您的变量。
关于javascript - 如何在 HTML 中的 for 循环中使用文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34185729/