For In-loop In Javascript(Node.js)意外地迭代数组索引而不是元素

For In-loop In Javascript(Node.js)意外地迭代数组索引而不是元素,javascript,node.js,foreach,Javascript,Node.js,Foreach,我有一个Node.js脚本,它读取和解析JSON文件的内容,并遍历其根数组的元素;当我试图检查这种迭代的对象时,我面临一些意想不到的结果;被迭代的对象似乎是被迭代元素的索引。 以下是脚本: if (process.argv.length != 3) { console.log("Usage: node chooseAdAmongAds.js /path/to/ads.json"); process.exit(9); } fs = require("fs"); var conte

我有一个Node.js脚本,它读取和解析JSON文件的内容,并遍历其根数组的元素;当我试图检查这种迭代的对象时,我面临一些意想不到的结果;被迭代的对象似乎是被迭代元素的索引。 以下是脚本:

if (process.argv.length != 3) {
    console.log("Usage: node chooseAdAmongAds.js /path/to/ads.json");
    process.exit(9);
}

fs = require("fs");
var content = fs.readFileSync(process.argv[2], "utf8")

var ads = JSON.parse(content);
for (ad in ads) {
    console.log(ad);
}
JSON文件:

[
    {
        "impressions": 131, 
        "ID": 514, 
        "investment": 2
    }, 
    {
        "impressions": 880, 
        "ID": 451, 
        "investment": 5
    }, 
    {
        "impressions": 135, 
        "ID": 198, 
        "investment": 9
    }, 
    {
        "impressions": 744, 
        "ID": 262, 
        "investment": 8
    }, 
    {
        "impressions": 234, 
        "ID": 954, 
        "investment": 19
    }, 
    {
        "impressions": 673, 
        "ID": 274, 
        "investment": 12
    }, 
    {
        "impressions": 442, 
        "ID": 734, 
        "investment": 6
    }, 
    {
        "impressions": 453, 
        "ID": 982, 
        "investment": 5
    }, 
    {
        "impressions": 55, 
        "ID": 275, 
        "investment": 5
    }, 
    {
        "impressions": 628, 
        "ID": 524, 
        "investment": 1
    }
]
和控制台输出:

iMac-di-Michele:Node.js michele$ node chooseAdAmongAds.js example.json 
0
1
2
3
4
5
6
7
8
9
iMac-di-Michele:Node.js michele$ 
为什么会发生这种情况?

对于对象的可枚举属性上的…in循环,数组是对象

相反,使用数组构造进行迭代,例如.forEach,或者只使用for循环并通过其索引访问数组元素

ads.forEach(function (ad) {
    console.log(ad)
})
对于对象的可枚举属性上的…in循环,数组是对象

相反,使用数组构造进行迭代,例如.forEach,或者只使用for循环并通过其索引访问数组元素

ads.forEach(function (ad) {
    console.log(ad)
})

您只是在输出索引。试一试


控制台.logads[ad] 您只是在输出索引。试一试

控制台.logads[ad];