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

fre*_*old 1 html javascript for-loop

我正在尝试编写一个"for"循环,它将在HTML页面上打印出与"document"对象(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>    
Run Code Online (Sandbox Code Playgroud)

当我在提示符中键入"document"时,我只获取数值,但是如果我将for循环中的代码从"myObj"更改为"document",它就会按预期工作.

任何帮助非常感谢.谢谢!

T.J*_*der 6

当我在提示符中键入"document"时,我只获取数值

那是因为你使用for-in一个字符串.将返回值为prompt字符串"document",而不是文档对象.

如果要使用字符串名称来查找全局属性(document是全局属性),可以通过windowglobal 执行此操作,global是对全局对象的引用:

for (x in window[myObj])
Run Code Online (Sandbox Code Playgroud)

这仅适用于全局变量,并且仅适用于全局属性的全局变量(从ES2015开始,并非所有全局变量都成为全局对象的属性).

值得注意的是,for-in只能访问可枚举的属性.我认为没有任何关于是否document需要枚举各种属性的规范,因此您的结果可能因浏览器而异.


你的代码正在成为Implicit Globals的恐怖的 牺牲品(披露:链接到我贫血的小博客).记得声明你的变量.