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",它就会按预期工作.
任何帮助非常感谢.谢谢!
当我在提示符中键入"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的恐怖的 牺牲品(披露:链接到我贫血的小博客).记得声明你的变量.
| 归档时间: |
|
| 查看次数: |
43 次 |
| 最近记录: |