V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ericgui
V2EX  ›  程序员

JavaScript 的 for loop 到底发生了什么?

  •  
  •   ericgui · 2019-08-03 03:17:09 +08:00 · 2709 次点击
    这是一个创建于 1972 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我有这么一段代码:

    
    async getResultFromApi(){
    
       let result = [];	
    
       let resp = await requestApi();
       
       // console.log(resp.data)
       
       for (let item of resp.data){
       // console.log(item)
       	 -> result.push(item.x.y);
       }
       
       return result;
    }
    
    

    这段代码,console.log 可以看到所有信息,也就是说,每一个 item 都是{ x: { y: 'hello'}},但是,箭头这一行总报错,说找不到。cannot get y of null

    而且 console.log(item)实在是打印不出来任何东西。。。。。

    这简直是太无法理解了

    所以请教大家,到底 for loop 发生了什么,console.log 又发生了什么?为什么可以 log 出来,但仍然报错?

    真是快被郁闷死了。

    11 条回复    2019-08-03 15:05:10 +08:00
    heimeil
        1
    heimeil  
       2019-08-03 03:22:10 +08:00
    console.log(typeof item);
    wunonglin
        2
    wunonglin  
       2019-08-03 03:47:59 +08:00
    ```
    let result = []

    try{
    let resp = await requestApi()
    for(const item of resp.data){
    .....
    }
    }catch ( err ){
    console.log(err)
    }
    ```

    err 值看看
    dartabe
        3
    dartabe  
       2019-08-03 04:05:21 +08:00
    The operand of the of clause must be iterable. That means that you need a helper function if you want to iterate over plain objects
    EugeneYWang
        4
    EugeneYWang  
       2019-08-03 04:56:46 +08:00
    像楼上说的,你的 resp.data 不是 iterable
    sker101
        5
    sker101  
       2019-08-03 05:48:14 +08:00 via iPhone
    console.log(Object.assign({}, item) 试试
    zqx
        6
    zqx  
       2019-08-03 08:25:53 +08:00 via Android
    不能相信接口数据,要做个容错,这段代码把 y 去了,只 push item.x 肯定没问题
    liuy1994g
        7
    liuy1994g  
       2019-08-03 10:44:38 +08:00 via Android
    item.x.y 着实属于高风险写法,这也是我越来越不喜欢 js 的原因
    fool079
        8
    fool079  
       2019-08-03 10:59:31 +08:00 via Android
    你可以 log 这个查看结果 Json.stringify(item)
    不过一般这种情况一定要判空 比如 item && item.x && item.x.y
    也可以用 lodash 的_.get
    也可以用 js 新提案

    不过到底还是接口的数据问题。
    muzuiget
        9
    muzuiget  
       2019-08-03 14:33:26 +08:00
    某个 item.x 是 null,最简单不就是“勾选出现异常时中断”吗?然后你就能查看出问题时那个 item 到时是什么。
    lbunderway
        10
    lbunderway  
       2019-08-03 15:04:27 +08:00
    typof item
    lbunderway
        11
    lbunderway  
       2019-08-03 15:05:10 +08:00
    typeof item
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5773 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 02:42 · PVG 10:42 · LAX 18:42 · JFK 21:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.