【问题标题】:for...of loop not working when remote debugger is disabled禁用远程调试器时 for...of 循环不起作用
【发布时间】:2017-12-30 23:20:27
【问题描述】:

当调试器被禁用时,我得到这个错误:

undefined is not a function (evaluating '_iterator[typeof Symbol === 'function' Symbol.iterator:'@@iterator']()')

但是当它启用时,我的代码可以正常工作。这只发生在安卓上。 ios 应用运行良好。

这是我的依赖项:

  • 反应
  • 反应原生
  • 本地基础
  • base-64
  • 领域

下面是产生影响的代码:

for(toy of toys) {
   console.log(toy)
}

如果我取消注释上面的行,我的代码可以在没有调试器的情况下工作。

【问题讨论】:

  • 根本不是该主题的专家,但是,是否有可能在禁用调试器的情况下 console 未定义?
  • 玩具的内容? Toys 是数组还是对象?普通对象不可迭代
  • 对象数组。 @EnieJakiro
  • @JordiNebot 不是真的,因为它适用于 iOS。
  • 你有没有更改任何 babel 配置?或者导入了与 babel 冲突的包

标签: javascript android react-native


【解决方案1】:

这不是一个完整的答案,而是基于MDN documentation 您只能在可迭代对象上使用 for ... of ... 循环。即对象必须实现@@iterator接口。

由于某种原因,在调试运行的 JS 解释器时似乎表现不同(可能是因为在调试 SDK 时使用了不同的解释器)。

编辑:React Native 中的 Symbol 和 @@iterator 似乎存在问题:https://github.com/facebook/react-native/pull/5294#issuecomment-190061913

这个问题最初出现在 Android 和 iOS 8.x 中,但在 iOS 9 中得到了修复(这解释了为什么您的代码在那里工作)。安卓版好像还有点问题。

【讨论】:

  • 数组是可迭代对象,他可以用for .. of ..遍历一个对象数组
  • @EnieJakiro An object is iterable if obj[Symbol.iterator] is a function,并且错误信息明确指出它是未定义的,这不是一个函数
  • 嗨@Pablo,无论有没有调试器,这都适用于iOS。我什至可以访问 Toys[index],所以我的对象数组不是问题。
  • @Pablo,我检查了我的 babel.rc,里面没有异常。
猜你喜欢
  • 1970-01-01
  • 2021-08-26
  • 2012-08-28
  • 1970-01-01
  • 2021-08-14
  • 1970-01-01
  • 2017-04-13
  • 2013-12-31
  • 2014-02-05
相关资源
最近更新 更多