我正在尝试编写一个"for"循环,它将在HTML页面上打印出与"document"对象(write,getElementById等)相关联的属性.不是为了实用,只是出于学习目的.如果直接使用"document"对象,它可以正常工作,但如果我尝试使用具有值"document"的变量,它将无法工作.这是我的代码:
Title
当我在提示符中键入"document"时,我只获取数值,但是如果我将for循环中的代码从"myObj"更改为"document",它就会按预期工作.
任何帮助非常感谢.谢谢!
当我在提示符中键入"document"时,我只获取数值
那是因为你使用for-in
一个字符串.将返回值为prompt
字符串"document"
,而不是文档对象.
如果要使用字符串名称来查找全局属性(document
是全局属性),可以通过window
global 执行此操作,global是对全局对象的引用:
for (x in window[myObj])
这仅适用于全局变量,并且仅适用于全局属性的全局变量(从ES2015开始,并非所有全局变量都成为全局对象的属性).
值得注意的是,for-in
只能访问可枚举的属性.我认为没有任何关于是否document
需要枚举各种属性的规范,因此您的结果可能因浏览器而异.
你的代码正在成为Implicit Globals的恐怖的 牺牲品(披露:链接到我贫血的小博客).记得声明你的变量.