【问题标题】:babel obj symbol.iterator undefined [duplicate]babel obj symbol.iterator undefined [重复]
【发布时间】:2016-06-22 03:22:39
【问题描述】:

我正在使用ES6 编写一个node 项目,并使用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  

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

【问题讨论】:

    标签: javascript ecmascript-6 babeljs


    【解决方案1】:

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

    for...of 语法特定于 collections,而不是所有对象。它将以这种方式遍历具有 [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]}`
    }
    

    【讨论】:

    • 我真的很怀念setmap。非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 2019-12-15
    • 2019-08-13
    • 2021-01-25
    • 1970-01-01
    • 2014-09-11
    • 2019-10-09
    相关资源
    最近更新 更多