Javascript for()循环w/对象声明和保留字-只是想澄清一下

Javascript for()循环w/对象声明和保留字-只是想澄清一下,javascript,json,object,for-loop,Javascript,Json,Object,For Loop,我正在编写下面的基本学习脚本。我的主要问题是在for()声明中,什么是“in”保留字,以及starName与它有什么关系,因为它在页面前面的任何地方都没有定义 我试图理解for()循环是如何用star语句中的starName“思考”的 <script type="text/javascript"> var star = {}; star["Polaris"] = new Object; star["Mizar"] = new Object; star["Aldebaran"] =

我正在编写下面的基本学习脚本。我的主要问题是在for()声明中,什么是“in”保留字,以及starName与它有什么关系,因为它在页面前面的任何地方都没有定义

我试图理解for()循环是如何用star语句中的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>

var-star={};
恒星[“北极星”]=新天体;
星[“Mizar”]=新对象;
星[“Aldebaran”]=新对象;
星形[“Rigel”]=新对象;
恒星[“北极星”]。星座=“小熊座”;
恒星[“米扎”]。星座=“大熊座”;
星体[“Aldebaran”]。星座=“金牛座”;
恒星[“猎户座]。星座=“猎户座”;
for(星中的星名){
var para=document.createElement('p');
para.id=星名;
para.appendChild(document.createTextNode(starName+
“:”+星[星名].星座];
document.getElementsByTagName(“正文”)[0]。appendChild(第段);
}
北极星:小熊星座

大熊座

奥尔德巴拉:金牛座

里格尔:猎户座


用于。。。在中,语法枚举对象的所有可枚举属性

starName
将是表示属性名称的字符串。您可以访问该属性(并执行许多其他操作),例如:

var p = star[starName];
现在,在使用
for。。。在
语法中:

利用以防止原型链中添加更高的属性

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
    }
}

用于。。。在中,语法枚举对象的所有可枚举属性

starName
将是表示属性名称的字符串。您可以访问该属性(并执行许多其他操作),例如:

var p = star[starName];
现在,在使用
for。。。在
语法中:

利用以防止原型链中添加更高的属性

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
    }
}

也许这会有所帮助:
for(现有变量中的newVariable)

for循环构造创建一个新变量,可以将其用作循环中的当前值。第二个值是要循环的变量


正如Bryan所指出的,for-in-construct只针对可枚举属性的循环。如果要检查某个内容是否可枚举,可以对其调用
.propertyIsEnumerable(0)

也许这会有所帮助:
for(existingVariable中的newVariable)

for循环构造创建一个新变量,可以将其用作循环中的当前值。第二个值是要循环的变量


正如Bryan所指出的,for-in-construct只针对可枚举属性的循环。如果要检查某个对象是否可枚举,可以对其调用
.propertyEnumerable(0)

它是如何工作的,星是一个具有多个值的数组(或对象)。想象一个数字为1到10的数组

关键字中的
遍历数组并将值分配给starName。因此,数字为1到10的数组将迭代10次,每次starName将成为下一个值


顺序基于数组(或对象)的索引。

它是如何工作的,is star是一个具有多个值的数组(或对象)。想象一个数字为1到10的数组

关键字中的
遍历数组并将值分配给starName。因此,数字为1到10的数组将迭代10次,每次starName将成为下一个值

顺序基于此构造的数组(或对象)的索引

for(var key in collection) { ... }
允许迭代JS集合(对象/映射和数组)中的可枚举键。 在每次迭代中,
key
将获得集合中包含的新键值

注#1:
for(…in…
有一个“酷”的特性,不仅可以通过对象本身上定义的键进行迭代,还可以通过对象原型中定义的键进行迭代

注#2:关键变量前面应该有'var'关键字,以便该循环有效地工作。如果没有“var”,将在全局命名空间中创建“key”变量。

此构造

for(var key in collection) { ... }
允许迭代JS集合(对象/映射和数组)中的可枚举键。 在每次迭代中,
key
将获得集合中包含的新键值

注#1:
for(…in…
有一个“酷”的特性,不仅可以通过对象本身上定义的键进行迭代,还可以通过对象原型中定义的键进行迭代


注#2:关键变量前面应该有'var'关键字,以便该循环有效地工作。如果没有“var”,将在全局名称空间中创建“key”变量。

Levi,这几乎完全回答了我的问题。我的脚本正在运行。我试图在谷歌搜索Javascript,但没有结果。所以IN实际上是给newVariable赋值,这是我现在理解的。@OldWest,正确。分配的值是循环中的当前属性。Levi,这几乎完全回答了我的问题。我的脚本正在运行。我试图在谷歌搜索Javascript,但没有结果。所以IN实际上是给newVariable赋值,这是我现在理解的。@OldWest,正确。分配的值是循环中的当前属性。良好的实践表明,数组应该使用常规for循环而不是for/in循环进行迭代。对象的属性没有定义顺序。良好的实践表明,数组应该使用常规的for循环而不是for/in循环进行迭代。对象的属性没有定义的顺序。Bryan,感谢您的详细描述和使用提示。另外,
starName