【问题标题】:TypeError: Cannot read property 'hasOwnProperty' of undefined - Twitter API V2 vs. GASTypeError:无法读取未定义的属性“hasOwnProperty”-Twitter API V2 与 GAS
【发布时间】:2021-09-07 06:42:50
【问题描述】:

推特 API:
https://developer.twitter.com/en/docs/twitter-api/tweets/timelines/introduction

理论上,当没有数据时,应该将值保留为空。如这部分脚本所示:

if (
  obj_data.data[int_i].entities.hasOwnProperty("urls") &&
  Array.isArray(obj_data.data[int_i].entities.urls) &&
  obj_data.data[int_i].entities.urls[0].expanded_url != undefined
  ) {
    array_Expanded_url.push([obj_data.data[int_i].entities.urls[0].expanded_url]);
  } else {
    array_Expanded_url.push([""]); 
  }

但是出现了这个错误提示:

TypeError: Cannot read property 'hasOwnProperty' of undefined

而且出现的错误明显表明这一行:

  obj_data.data[int_i].entities.hasOwnProperty("urls") &&

如何修改我的脚本以使这种情况不再发生?

【问题讨论】:

    标签: javascript google-apps-script google-sheets twitter hasownproperty


    【解决方案1】:

    只需检查链中的真实值

    if ( obj_data.data && obj_data.data[int_i] && obj_data.data[int_i].entities && obj_data.data[int_i].entities.urls &&
        Array.isArray(obj_data.data[int_i].entities.urls) &&
        obj_data.data[int_i].entities.urls[0].expanded_url != undefined) 
      { ....
    

    或者更简洁(谢谢@Scotty Jamison)

    if (obj_data.data?.[int_i]?.entities?.urls?.[0]?.expand_url !== undefined) {...
    

    你可以看到哪里出了问题

    console.log(!obj_data.data, !obj_data.data[int_i], !obj_data.data[int_i].entities,  !obj_data.data[int_i].entities.urls);
    

    ex 输出: false false true true

    【讨论】:

    • 您还可以使用较新的“?”来简化它。运算符:obj_data.data?.[int_i]?.entities?.urls?.[0]?.expand_url !== undefined
    • 谢谢@ScottyJamison!我学到了一些新东西并添加到我的答案中。
    • 嗨@Kinglish,不幸的是,最简洁的模式不起作用,因为它最终使所有行都为空,而实际上只需要将行留在原处。但是根据Ranjith S 的回答,我能够理解您的想法并最终加入了两个答案以在我的脚本中使用。两个答案都是正确的,但您先回答,因此值得验证为最佳答案。
    【解决方案2】:

    检查空值或未定义值

    if (
      obj_data?.data[int_i]?.entities?.hasOwnProperty('urls') &&
      Array.isArray(obj_data?.data[int_i]?.entities.urls) &&
      obj_data?.data[int_i]?.entities?.urls[0]?.expanded_url != undefined
    ) {
      array_Expanded_url.push([
        obj_data.data[int_i].entities.urls[0].expanded_url,
      ]);
    } else {
      array_Expanded_url.push(['']);
    }
    

    【讨论】:

      猜你喜欢
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 2018-10-09
      • 2019-10-30
      • 1970-01-01
      • 1970-01-01
      • 2021-02-28
      • 2020-11-29
      相关资源
      最近更新 更多