当前位置: 首页 > 知识库问答 >
问题:

简单条件IF不能正常工作(属性未定义错误)

蓟捷
2023-03-14

我试图用以下内容对属性做一个简单的条件检查:

 if ( message.updates[0].message != 'undefined' && message.updates[0].message.message != 'undefined') {
                                                                                     ^

TypeError: Cannot read property 'message' of undefined

我也试过:

 if (typeof message.updates[0].message.message != 'undefined') 

 if (message.updates[0].message.message.length > 0)

 if (typeof message.updates[0].message.message != undefined) 

 if ( message.updates[0].message != 'undefined' && message.updates[0].message.message != 'undefined') {
 

都不行,我每次都犯同样的错误。

这是我根据答案中的要求做检查的数据。

对于下面的数据,不应输入IF并简单传递,不应给出未定义的错误。

谢谢你!

{
  _: 'updates',
  updates: [
    {
      _: 'updateReadChannelInbox',
      flags: 0,
      channel_id: 1415629976,
      max_id: 46,
      still_unread_count: 0,
      pts: 48
    },
    {
      _: 'updateNewChannelMessage',
      message: [Object],
      pts: 48,
      pts_count: 1
    }
  ],
  users: [
    {
      _: 'user',
      flags: 33561715,
      self: true,
      contact: true,
      mutual_contact: true,
      deleted: false,
      bot: false,
      bot_chat_history: false,
      bot_nochats: false,
      verified: false,
      restricted: false,
      min: false,
      bot_inline_geo: false,
      support: false,
      scam: false,
      apply_min_photo: true,
      first_name: 'Andrei',
      phone: '40756274034',
      photo: [Object],
      status: [Object]
    }
  ],
  chats: [
    {
      _: 'channel',
      flags: 286977,
      creator: true,
      left: false,
      broadcast: false,
      verified: false,
      megagroup: true,
      restricted: false,
      signatures: false,
      min: false,
      scam: false,
      has_link: false,
      has_geo: false,
      slowmode_enabled: false,
      call_active: false,
      title: 'tester',
      photo: [Object],
      date: 1616253844,
      version: 0,
      admin_rights: [Object],
      default_banned_rights: [Object]
    }
  ],
  date: 1616336995,
  seq: 0
}

共有2个答案

慕飞章
2023-03-14

如果不知道您正在查看的对象/数据结构的详细信息,就很难说出哪里出了问题。例如,您的问题可能只是没有消息。updates[0]

我强烈建议注销您的数据,然后在控制台中进行交互,在这些对象上使用方法,这将让您确定预期的行为。

此外,查看这篇文章,它更深入地探讨了检测未定义属性的问题。我认为这些建议会有所帮助。

我注意到几个具体问题:

  • 从此处开始解决问题:在最顶部的表达式message.updates[0].message!='undefined'中有undefined作为字符串undefined是一个原语,而不是字符串,所以不应该用引号包装。(但是,typeof断言返回字符串,因为undefined的类型是'undefined'。)
  • FWIW...如果您正在研究这里的所有选项,那么在某些条件下,通过简单地用bang断言类似if!message.updates[0]之类的东西来测试定义是很普遍的。在大多数情况下,这会得到您想要的结果,因为undefined被视为“falsy”值,然后被强制为true。然而,如果实际参数本身有可能是合法的错误的,它将误导您。(特别是,值为零被视为虚假,因此该断言会产生误导。)
房学
2023-03-14

将其更改为:

if (message.updates[0]?.message?.message !== undefined) {

这是可选的链接操作符,将自动为您处理未定义的错误。

 类似资料:
  • 我有一个问题。我写了代码,需要指出数组的元素比数组的下一个元素大。您可以在输出图片上看到数组$arr应该只包含元素70,因为

  • 我正试图在按下某个按钮时弹出一个警报对话框。我首先使用了Android Developer的示例代码而不是'这不起作用,所以我根据在这个站点上发现的情况进行了更改,但是现在我的程序在按下按钮后被迫停止。 就你的知识而言,这是在第二个不同于主要的活动中完成的。不确定这是否重要.... ‘ 碰撞日志:“03-25 19:34:24.373:E/AndroidRuntime(18828):致命异常:ma

  • 2,错误{org.apache.directory.server.LDAP.ldapserver}-ERR_171无法将LDAP服务(10,389)绑定到服务注册表。java.net.BindException:已在使用的地址 请帮忙谢谢 --------提示------------------- JAVA_HOME环境变量设置为/opt/java CARBON_HOME环境变量设置为/mnt/1

  • 问题内容: 我知道这是一个基本问题,但是我很好奇下面的代码为什么不起作用。没有用例不会声明此变量。 我得到错误 我确定这只是我还在学习的基本GOLANG内容。 谢谢你的支持 问题答案: 块有自己的范围。在您的情况下,它们在外部不可见。 您可以在修复前声明。 文件:https://golang.org/ref/spec#Declarations_and_scope 您可能还需要阅读:Go中的声明范围

  • 问题内容: 我正在借助以下方法设置新的React:https : //github.com/facebookincubator/create-react- app 但是,我遇到了一个棉绒问题。我收到以下掉毛错误。 这是导致问题的代码: 我试着使用react / prop-types规则,但无济于事。 问题答案: 根据这个问题发表评论。 这似乎是因为您在安装时仅应使用create-react- ap

  • 我收到一个错误 (节点:2632)未经处理的PromisejectionWarning:TypeError:无法读取模块处未定义的更新成员(C:\Users\Asus\Desktop\Section 50\commands\Main commands\Mod\member count.js:5:31)的属性“channels”。在客户端导出(C:\Users\Asus\Desktop\sectio