为什么javascript中的空数组进入循环?

时间:2016-12-01 01:44:26

标签: javascript node.js

我有以下代码段:

console.log('**1**',parentNode.child.length); //1
            for(var ch in parentNode.child)
            {
                console.log('PTree root child',parentNode.child[ch]); //2
            }

在// 1中,parentNode.child.length出现为0 但它仍然进入for循环并在第// 2行中提供以下输出:

PTree root child (val) {
        if (this.indexOf(val) === -1) {
            this.push(val);
        }

        return this;
    }

我不确定为什么会这样。

1 个答案:

答案 0 :(得分:1)

我假设parentNode.child是数组。 所以,这可能是导致这种情况的可能性。

  1. 该数组具有非数字命名属性。
  2. var data = [];
    data.someFunc = function(){};
    console.log("length: %s", data.length);
    for(var key in data) console.log("%s: %s",key, data[key]);

    1. 你以某种方式修补了Array.prototype。
    2. Array.prototype.coolFunc = function(){ return "cool" };
      var data = [];
      console.log("length: %s", data.length);
      for(var key in data) console.log("%s: %s", key, data[key]);

      因此,要避免这种情况,只需使用forEach

      即可

      var data = [];
      data.someFunc = function(){};
      console.log("length: %s", data.length);
      data.forEach(item => console.log(item));