Неперехваченная синтаксическая ошибка: неожиданный токен ‘.’ — как мне ее перехватить?

#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. (И кроме того, я вроде как ненавижу изучать вещи, выходящие за рамки стандарта. У меня сейчас нет на это времени.)