【问题标题】:How to catch array index out of bound in JavaScript?如何在 JavaScript 中捕获超出范围的数组索引?
【发布时间】:2019-07-04 21:46:13
【问题描述】:

当访问超出数组范围时,我想捕获一个错误,但它似乎没有引发错误。

let arr = [2,4,5];
let test = arr[3];
console.log(test);

我知道我可以测试未定义并抛出错误

if (arr[3] === undefined) throw new Error();

但是为什么我不能像下面这样尝试并抓住它。

let arr = [2,4,5];
try {
      let tmp = arr[3];
    } catch(e) {
      lastIndex = findLastIndex(arr, high / 2, high);
      break;
    }

【问题讨论】:

  • 在 JavaScript 中访问未定义的属性不会导致运行时错误。这就是语言的工作方式。
  • 是的,JS 在访问不存在的属性时不会抛出错误。如果您想处理它,请提前做:if (i < arr.length) tmp = arr[i] else …
  • @Bergi 这是一个很好的解决方案

标签: javascript error-handling try-catch


【解决方案1】:

如您所见,访问不存在的数组索引不会引发错误 - “访问”的值将只是 undefined。普通对象的工作方式相同:

const obj = {};
// No error:
const val = obj.foo;

console.log(val);

但是错误通常不应该用于控制流——错误应该处理异常的情况。对于您正在做的事情,我会改用if/else,例如

const arr = [0, 1, 2];
if (4 in arr) {
  const val = arr[4];
  // ...
} else {
  console.log('4 is not in the arr');
}

【讨论】:

    猜你喜欢
    • 2016-09-10
    • 2021-10-07
    • 1970-01-01
    • 2011-09-25
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多