收藏
回答

第三方平台,同一段代码,在开发版、体验版居然出现了两种不同执行结果,震惊!可怕!

问题模块 框架类型 问题类型 操作系统 操作系统版本 手机型号 微信版本
客户端 小程序 Bug MIUI 9.5 小米MIX2S 6.6.7


let reminders = [-1];
var i;
for (i in reminders) {
 if (reminders[i] != -1) {
   if (reminders[i] == 0) {
     console.log('abc');
   } else {
     console.log('def');
   }
 } else {
   console.log('not invoke');
 }
}


第三方平台开发版执行结果:


这是正常的。


第三方平台体验版执行结果:


for循环居然走了2次,我打印了log,第二次for循环,变量i是null,reminders[i]也是null。呵呵呵呵呵呵呵呵呵

最后一次编辑于  2018-06-05  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

9 个回答

  • nali
    nali
    2018-06-06

    大哥,你不知道数组还有个length属性吗?for in 一个数组会多一次啊

    2018-06-06
    赞同 3
    回复 1
    • 张博 Bill
      张博 Bill
      2018-06-25

      你说的没毛病,但是体验版的执行情况跟你说的一致。开发版没出现你说的“多的那一次”

      2018-06-25
      回复
  • ៚你的微笑•ᴗ•
    ៚你的微笑•ᴗ•
    2018-06-05

    我也曾遇到。 太可怕了。。。。。。

    2018-06-05
    赞同 1
    回复
  • c
    c
    2018-06-05

    for in 会对数组进行一次操作 底层搞清楚吧

    2018-06-05
    赞同 1
    回复 5
    • 张博 Bill
      张博 Bill
      2018-06-05

      那为什么开发版和体验版执行结果不一样

      2018-06-05
      回复
    • c
      c
      2018-06-05回复张博 Bill

      写法有问题 for in 不能reminders[i] 这样写了 同样的代码 多执行几次 就会不一样 用正常的for循环就好了

      2018-06-05
      回复
    • Galaxy Ranger
      Galaxy Ranger
      2018-06-06回复c
      为什么会不一样?for in一个数组,i 是数组标号,和正常for循环不是一样的吗。
      2018-06-06
      回复
    • deRek
      deRek
      2018-06-07回复Galaxy Ranger

      prototype了解一下。

      猜测是体验版那被扩展了prototype导致输出多了。

      就算你用for..in + hasOwnProperty, 如果代码中有[].xx = xx, xx照样还是能遍历出来。


      安全的遍历数组方法是用自带函数或者for of.

      2018-06-07
      回复
    • Galaxy Ranger
      Galaxy Ranger
      2018-06-07回复deRek

      你说的对,有这个可能。没想到。

      2018-06-07
      回复
  • 令狐不冲
    令狐不冲
    2018-06-06

    遍历数组不要用for in,for in的结果会受到外部因素的影响

    2018-06-06
    赞同
    回复 1
    • 张博 Bill
      张博 Bill
      2018-06-07

      我们已经整体查用for in循环的代码了,都改成forEach了

      2018-06-07
      回复
  • 老郭😄
    老郭😄
    2018-06-07

    以上都是大神!

    2018-06-07
    赞同
    回复
  • 嘛也某
    嘛也某
    2018-06-07

    map遍历数组了解一下

    2018-06-07
    赞同
    回复
  • 张博 Bill
    张博 Bill
    2018-06-07

    所有质疑我的人,你们都没注意到重点,开发版与体验版执行结果不一样,我并未说体验版的执行结果不对,我也没说开发版的执行结果就是对的。


    问题在于为什么开发版与体验版执行结果不一样!

    问题在于为什么开发版与体验版执行结果不一样!

    问题在于为什么开发版与体验版执行结果不一样!

    2018-06-07
    赞同
    回复
  • wish
    wish
    2018-06-07

    习惯就好

    2018-06-07
    赞同
    回复
  • 冰糖雪梨
    冰糖雪梨
    2018-06-07

    运行环境不一样,一切以真机为准呗

    2018-06-07
    赞同
    回复 1
    • 张博 Bill
      张博 Bill
      2018-06-07

      开发版、体验版都是真机

      2018-06-07
      回复