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

时间:2015-12-09 17:55:50

标签: javascript html 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>    

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

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

3 个答案:

答案 0 :(得分:6)

  

当我输入&#34;文件&#34;在提示中,我只是获取数值

这是因为您在字符串上使用for-inprompt的返回值将是字符串"document",而不是文档对象。

如果要使用字符串名称来查找全局属性(document是全局属性),可以通过window global来实现,这是对全局对象的引用:

for (x in window[myObj])

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

值得注意的是,for-in仅访问可枚举的属性。我不认为document的各种属性是否需要可枚举,因此您的结果可能因浏览器而异。

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

答案 1 :(得分:2)

字符串"document"不等于全局变量document。如果您尝试使用变量名称访问全局变量,则可以使用括号表示法:

&#13;
&#13;
    function objProps() {
        // var myObj=prompt("Object?");
        var myObj='document';
        for (x in window[myObj]) {
            document.write(x + "<br />");
        }
    }
    objProps();
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您可以使用[]命名法来使用提示符:

std::set<T, C A>