微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

类型错误:无法读取未定义的属性“hasOwnProperty” - Twitter API V2 与 GAS

如何解决类型错误:无法读取未定义的属性“hasOwnProperty” - Twitter API V2 与 GAS

推特 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") &&

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

解决方法

只需检查链中的真值

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

,

检查空值或未定义值

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(['']);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。