如何捕获带有自定义错误信息的"TypeError: Cannot read properties of undefined (read ɰ')“?

如何解决如何捕获带有自定义错误信息的"TypeError: Cannot read properties of undefined (read ɰ')“? ?

您可以在catch块中移动throw语句。

const arr = [{
  neighbours: ['AFG','CNG']
}]

try {
  let nearBorder = arr[0].borders[0];
  if (nearBorder) {
    console.log(`Your border is ${nearBorder}`);
  }
} catch (e) {
  throw new Error('No neighbour found.');
}

更新

const arr = [{
  neighbours: ['AFG','CNG']
}];

let proptocheck = 'borders';

if (!arr[0].hasOwnProperty(proptocheck)) {
  throw new Error(`${proptocheck} not found`);
}

解决方法

如何捕获不存在的属性的错误?示例:

const arr = [
  {
    neighbours: ['AFG', 'CNG'],
  },
];

现在,当我试图访问一个可能存在也可能不存在的属性时,如果它不存在,那么如何抛出并捕获自定义消息的错误?

 try {
  const nearBorder = arr[0].borders[0];

  // Above statement returns Error: Cannot read properties of undefined (reading '0')"
  // Now how to throw above error with custom error message?

  if (!nearBorder) {
    throw new Error('No neighbour found!');
  } else {
    console.log(`Your border is ${nearBorder}`);
  }
} catch (err) {
  console.log(err);
}

输出:TypeError: Cannot read properties of undefined (reading '0')

我知道,如果我像下面这样通过可选的更改来检查属性的存在,那么我就可以用undefined抛出自定义消息

try {
  const nearBorder = arr[0].borders?.[0]; // returns undefined, NOT the actual error

  if (!nearBorder) {
    throw new Error('No neighbour found!');
  } else {
    console.log(`Your border is ${nearBorder}`);
  }
} catch (err) {
  console.log(err);
}

在上面的代码行中,undefined是可捕获的,但不是实际的错误。但是如何用定制的错误消息捕获实际的错误'Cannot read properties of undefined (reading '0')'呢?

输出:Error: No neighbour found!

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

其他编程问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?