4

I want to catch an error when access outside of array's bounds happens but it doesn't seem to throw an error.

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

I know that I can test for undefined and throw an error

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

but how come I can't just do try and catch it like the following.

let arr = [2,4,5];
try {
      let tmp = arr[3];
    } catch(e) {
      lastIndex = findLastIndex(arr, high / 2, high);
      break;
    }
3
  • 1
    Accessing an undefined property in JavaScript does not cause a runtime error. It's just the way the language works. Commented Jul 4, 2019 at 21:50
  • Yes, JS doesn't throw an error when accessing a non-existing property. If you want to handle it, do it anticipatory: if (i < arr.length) tmp = arr[i] else …. Commented Jul 4, 2019 at 21:55
  • @Bergi that's a good solution Commented Jul 6, 2019 at 21:11

1 Answer 1

9

As you can see, accessing a non-existent array index does not throw an error - the value "accessed" will simply be undefined. Ordinary objects work the same way:

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

console.log(val);

But errors generally should not be used for control flow - errors should handle exceptional cases. For what you're doing, I'd use if/else instead, eg

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

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.