• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ericgui
V2EX  ›  程序员

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

  •  
  •   ericgui · Aug 3, 2019 · 3134 views
    This topic created in 2501 days ago, the information mentioned may be changed or developed.

    我有这么一段代码:

    
    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 replies    2019-08-03 15:05:10 +08:00
    heimeil
        1
    heimeil  
       Aug 3, 2019
    console.log(typeof item);
    shakaraka
        2
    shakaraka  
    PRO
       Aug 3, 2019
    ```
    let result = []

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

    err 值看看
    dartabe
        3
    dartabe  
       Aug 3, 2019
    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  
       Aug 3, 2019
    像楼上说的,你的 resp.data 不是 iterable
    sker101
        5
    sker101  
       Aug 3, 2019 via iPhone
    console.log(Object.assign({}, item) 试试
    zqx
        6
    zqx  
       Aug 3, 2019 via Android
    不能相信接口数据,要做个容错,这段代码把 y 去了,只 push item.x 肯定没问题
    liuy1994g
        7
    liuy1994g  
       Aug 3, 2019 via Android
    item.x.y 着实属于高风险写法,这也是我越来越不喜欢 js 的原因
    fool079
        8
    fool079  
       Aug 3, 2019 via Android
    你可以 log 这个查看结果 Json.stringify(item)
    不过一般这种情况一定要判空 比如 item && item.x && item.x.y
    也可以用 lodash 的_.get
    也可以用 js 新提案

    不过到底还是接口的数据问题。
    muzuiget
        9
    muzuiget  
       Aug 3, 2019
    某个 item.x 是 null,最简单不就是“勾选出现异常时中断”吗?然后你就能查看出问题时那个 item 到时是什么。
    lbunderway
        10
    lbunderway  
       Aug 3, 2019
    typof item
    lbunderway
        11
    lbunderway  
       Aug 3, 2019
    typeof item
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1078 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 23:17 · PVG 07:17 · LAX 16:17 · JFK 19:17
    ♥ Do have faith in what you're doing.