#javascript #android #google-chrome #error-handling #microsoft-edge
#javascript #Android #google-chrome #обработка ошибок #microsoft-edge
Вопрос:
Я получаю ошибку в заголовке из этого кода:
try {
let n = undefined;
let nx = n?.x;
} catch (err) {
missingFeatures.push("Syntax n?.x not recognized");
}
Как вы можете видеть, код разработан с надеждой перехватить поддержку этого синтаксиса.
Но это не работает. Есть ли какой-либо способ перехватить эту синтаксическую ошибку?
Немного интересно то, что это происходит в новом Edge на базе Chromium на Android 10.
Ответ №1:
Вместо этого вы можете создать new Function
и посмотреть, выдает ли конструкция функции. Сначала нет необходимости определять другие переменные, поскольку все, о чем вы заботитесь, это правильный ли синтаксис, а проверка синтаксиса не заботится о том, определены ли переменные, поскольку функция никогда не запускается:
try {
const fn = new Function('n?.x');
} catch (err) {
missingFeatures.push("Syntax n?.x not recognized");
}
Тем не менее, проверка того, поддерживается ли определенный синтаксис, довольно странная. Если вы не пишете что-то ориентированное на пользователя (например, живой редактор JavaScript), почти всегда имеет смысл просто перенести ваш код в ES5 или ES6 для производства и предоставить его всем.
Комментарии:
1. Спасибо, я только что протестировал, и он отлично работает. Я совершенно забыл о
new Function()
. Думал, что мне это никогда не понадобится. 🙁2. О транспиляторах: они не подходят для меня. Это для довольно сложного PWA, и он едва работает на не слишком модном телефоне Android 10. (И кроме того, я вроде как ненавижу изучать вещи, выходящие за рамки стандарта. У меня сейчас нет на это времени.)