我正在编写下面的基本学习脚本。我的主要问题是在 for() 声明中,“IN”保留字是什么以及 starName 与它有何关系,因为它没有在页面之前的任何地方定义。
我试图理解 for() 循环如何使用 starName in star 语句“思考”。
<script type="text/javascript">
var star = {};
star["Polaris"] = new Object;
star["Mizar"] = new Object;
star["Aldebaran"] = new Object;
star["Rigel"] = new Object;
star["Polaris"].constellation = "Ursa Minor";
star["Mizar"].constellation = "Ursa Major";
star["Aldebaran"].constellation = "Taurus";
star["Rigel"].constellation = "Orion";
</script>
</head>
<body id="mainbody">
<script type="text/javascript">
for (starName in star) {
var para = document.createElement('p');
para.id = starName;
para.appendChild(document.createTextNode(starName +
": " + star[starName].constellation));
document.getElementsByTagName("body")[0].appendChild(para);
}
</script>
<!-- output below -->
<p id="Polaris">Polaris: Ursa Minor</p>
<p id="Mizar">Mizar: Ursa Major</p>
<p id="Aldebaran">Aldebaran: Taurus</p>
<p id="Rigel">Rigel: Orion</p>
最佳答案
for ... in
语法枚举对象的所有可枚举属性。
starName
将是表示属性名称的字符串。您可以像这样访问该属性(并执行许多其他操作):
var p = star[starName];
现在,在使用 for ... in
语法时,您应该注意以下几点:
利用hasOwnProperty
以防止在原型(prototype)链中添加更高的属性。
Object.prototype.allObjectWillInheritThis = 1;
/// ...
for (var starName in star) {
if (star.hasOwnProperty(starName)) {
// Do your thing
}
}
过滤掉函数。您很可能对功能不感兴趣,而对属性感兴趣。
for (var starName in star) {
if (star.hasOwnProperty(starName) &&
typeof star[starName] !== 'function') {
// Do your thing
}
}
关于Javascript for() 循环带对象声明和 IN 保留字 - 只是寻找一些说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7222233/