Можно ли предотвратить запись конкретной ошибки JavaScript в консоль?

Гипотетически - скажем, у меня есть некоторый JavaScript для обработки нажатий трех разных кнопок:

$("#working").click(function () {
    alert("Seth Rollins is the greatest champion of all time.");
    console.log("WWE World Heavyweight Champion");
});

$("#fix-this-error").click(function () {
    alert(this_should_not_show_up_in_the_console);
    console.log("This won't show");
});

$("#should-error").click(function () {
    alert(oipewavqn2389tvb3t8ahwleuhtvab3iwuthabvlewiuweaqhaoiuhva98r3b2);
    console.log("This won't show either");
});

Первый из них будет работать, когда он предупреждает строку, и он будет записывать в консоль сообщение, написанное после предупреждения.

Вторая и третья функции не будут работать, потому что они пытаются предупредить переменные, которые не определены. Их последующее console.logs не будет ничего выводить.

Мой вопрос: возможно ли предотвратить вывод ошибки из второй функции на консоль при сохранении следующих свойств?:

  • Первая функция должна работать как задумано
  • Вторая функция последующая console.log все еще не должен казнить
  • Третья функция (и любые другие функции) должны по-прежнему выводить свои ошибки

Изменить: Вот скрипка, чтобы поиграть в - https://jsfiddle.net/5m40LLmm/2/

SUPER EDIT: я не хочу, чтобы исполнение логики во второй функции действительно менялось. Я хочу, чтобы ошибка была сброшена, а .click() обработчик должен завершиться до того, как он достигнет console.log, как это происходит сейчас. Я просто хочу, чтобы ошибка не отображалась. Я не хочу использовать try а также catch чтобы обойти ошибку или каким-то образом проверить, существует ли переменная, прежде чем я использую alert(), Я знаю и хочу, чтобы ошибка произошла, я просто хочу предотвратить ее отображение. Я надеюсь, что это делает это более ясным.

3 ответа

Решение

Когда вы запускаете это, функция console.log никогда не вызывается. Функция оповещения дает сбой, регистрирует, что это не удалось, и функция прослушивания щелчка завершается. console.log() никогда не достигается Это означает, что вам просто нужно, чтобы предупреждение не показывало ошибку. Здесь полезны операторы try catch.

$("#fix-this-error").click(function () {
    try {
        alert(this_should_not_show_up_in_the_console);
        console.log("This won't show");
    } catch (e) {
        // Code jumps here when `alert()` fails.
        // `e` stores information about the error
        // If you don't want to put everything in the try/catch,
        // you can stop the function from continuing execution with
        return;
    }
});

Используйте попробовать поймать

$("#fix-this-error").click(function () {
    try {
        alert(this_should_not_show_up_in_the_console);
        console.log("This won't show");
    } catch() {}
});

или проверьте, определена ли переменная, прежде чем пытаться ее использовать.

Использовать typeof ключевое слово, чтобы проверить, определена ли конкретная переменная или нет.

тип документации

$("#fix-this-error").click(function () {
    if (typeof this_should_not_show_up_in_the_console !== "undefined")
    {
        alert(this_should_not_show_up_in_the_console);
        console.log("This won't show");
    }
});
Другие вопросы по тегам