babel obj symbol.iterator undefined

时间:2016-03-08 09:00:40

标签: javascript ecmascript-6 babeljs

我正在使用node编写ES6项目,并使用babel cli编译为ES5,但在ES6 for of

上出错
let parseParams = (obj)=> {
  let string = ''
  for (var [key,value] of obj) {
    string += `/${key}/${value}`
  }
  console.log(`obj: ${string}`)
  return string;
}  

编译了js =>

for (var _iterator = params[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
        var _step$value = _slicedToArray(_step.value, 2);

        var key = _step$value[0];
        var value = _step$value[1];

        string += '/' + key + '/' + value;
    }  

params[Symbol.iterator] 未定义

let params = {
    key: 'value'
}


babel server.babel.js -o server.js  

我该如何解决这个问题,谢谢。

1 个答案:

答案 0 :(得分:1)

引用Difference between for...of and for...in

  

for of of 语法特定于集合,而不是所有对象。它将以这种方式迭代任何具有 [Symbol.iterator] 属性的集合的任何元素。

params没有[Symbol.iterator]属性,因此您无法在此处使用for ... of循环。

obj转换为可迭代类型(例如Map

let params = new Map([['key', 'value']]);

使用for ... in循环:

for (let prop in obj) {
   string += `/${prop}/${obj[prop]}`
}