javascript - 如何在 HTML 中的 for 循环中使用文档

标签 javascript html for-loop

我正在尝试编写一个“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-inprompt 的返回值将是字符串 "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/

相关文章:

javascript - React.js 组件重新渲染

javascript - 如何在一定时间后删除 HTML 附加内容

javascript - 将 http 发送到 NodeJS/Express 后端以执行函数的按钮

javascript - 包括带有 html 和 node.js 的 js 文件

multithreading - 如何使用人造丝进行枚举迭代?

Java程序使用for循环画一个正方形?

javascript - 与JS不一致?

JavaScript - 图库 - 灯箱 - 只有半个屏幕在后台变黑

r - 如何在 for 循环中重命名数据框

javascript - 使用jQuery控制video标签