下面我正在做一个基本的学习脚本。我的主要问题是在for()声明中,什么是' in‘保留字,以及starName与它的关系,因为它在页面的早期没有定义。
我正在尝试理解for()循环是如何使用星型starName语句中的语句“思考”的。
<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>发布于 2011-08-28 16:38:01
for ... in语法枚举对象的所有可枚举属性。
starName将是表示属性名称的字符串。您可以这样访问该属性(并执行许多其他事情):
var p = star[starName];现在,在使用for ... in语法时,您应该注意到以下几点:
利用hasOwnProperty防止在原型链中添加更高的属性。
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
}
}发布于 2011-08-28 16:38:04
也许这会有帮助:for(newVariable in existingVariable);
for-循环构造创建一个新变量,您可以将其用作循环中的当前值。第二个值是要循环使用的变量。
正如Bryan所指出的,for-in结构只循环可枚举属性.如果要检查某物是否可枚举,可以在其上调用.propertyIsEnumerable(0)。
发布于 2011-08-28 16:40:13
它的工作原理是,星号是一个具有多个值的数组(或对象)。想象一个数字从1到10的数组。
in关键字遍历数组并将值分配给starName。因此,数字为1到10的数组将迭代10次,每次starName都将成为下一个值。
顺序基于数组(或对象)的索引。
https://stackoverflow.com/questions/7222233
复制相似问题