Хорошо ли использовать try catch в такой ситуации?
Нет, поскольку он будет отлавливать и отбрасывать любые другие ошибки, отличные от ожидаемых, что значительно затрудняет отладку. К сожалению, обработка исключений в JavaScript довольно слабая и не дает возможности отлавливать только определенные исключения. Вместо этого вы должны поймать все, сознательно понюхать то, что вы хотите, и повторно выбросить все остальное:
try {
a[x][y][z].update();
} catch(e) {
if (!(e instanceof TypeError))
throw e;
}
, который не очень понятен, и все еще будет отлавливать множество других потенциальных ошибок, поскольку встроенные в JavaScript исключения, такие как TypeError
, довольно широки.
Я бы пошел к вашему исходному решению, за исключением использования более явного оператора in
вместо неуклюжего typeof
теста:
if (x in a && y in a[x] && z in a[x][y])
a[x][y][z].update();