Javascript for() 循环带对象声明和 IN 保留字 - 只是寻找一些说明

标签 javascript json object for-loop

我正在编写下面的基本学习脚本。我的主要问题是在 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/

相关文章:

javascript - Vue.js Import mixin 不在应用程序中导入

javascript - 前缀为 "--"的 babel-node 参数未传递

javascript - Next.js 链接和路径

javascript - 如果 v8 在对象增长时重新哈希

javascript - 如何使用 jquery .when 访问 json 数据以附加到页面?

json - Gson Unicode字符转Unicode字符编码

python - 如何使用 python 消除 json 文件中的冗余

javascript - 使用键获取对象内数组项的值

javascript - 根据规范,JavaScript 中的所有对象都是真实的,但在 DOM 中,一个非原始对象不是。哪个?

javascript - 动态调用对象