Javascript - 在尝试循环对象时{for} for循环崩溃

时间:2017-01-12 15:44:47

标签: javascript for-of-loop

我有一个函数传入的这个对象

enter image description here

然后我想用这段代码循环遍历

    let formData = new FormData();
    let item = {};
    let i = 0;
    for (item of files) {
        formData.append('file' + i, files[i]);
        formData.append('filesNumber', i + 1);
        i++;
    }

但是当执行到达for循环的声明时,它会崩溃并出现此错误

Uncaught TypeError: files[Symbol.iterator] is not a function

有什么问题?

1 个答案:

答案 0 :(得分:2)

基本对象不会自动实现Symbol.iteratorHere's a list of objects that do.

为了使用for..of语法,您必须实现自己的迭代器。



let files = {
  0: "a",
  1: "b",
  2: "c",
  
  [Symbol.iterator]: function*() {
    let i = 0;
    while (this.hasOwnProperty(i)) {
      yield this[i];
      i++;
    }
  }
};

for (let item of files) {
  console.log(item);
}




或者,您只需grabs the objects keys并迭代它们。



let files = {
  0: "a",
  1: "b",
  2: "c"
};

let keys = Object.keys(files);
for (let i = 0; i < keys.length; i++) {
  let key = keys[i];
  let item = files[key];
  console.log(`${key}: ${item}`);
}
&#13;
&#13;
&#13;

你也可以使用好的,老式的for..in循环来检查键。

&#13;
&#13;
let files = {
  0: "a",
  1: "b",
  2: "c"
};

for (let key in files) {
  console.log(`${key}: ${files[key]}`);
}
&#13;
&#13;
&#13;