js переопределить console.log, если не определен

Какое решение вы рекомендуете, второе проще (меньше кода), но есть недостатки при его использовании?

Первый: (Установите глобальный флаг отладки)

// the first line of code
var debug = true;
try {
    console.log
} catch(e) {
    if(e) {
        debug=false;
    }
};
// Then later in the code
if(debug) {
    console.log(something);
}

Во-вторых: переопределить console.log

try {
    console.log
} catch(e) {
    if (e) {
        console.log = function() {}
    }
};
// And all you need to do in the code is
console.log(something);

Ответы на вопрос(7)

РЕДАКТИРОВАТЬ: Энди ответ это гораздо элегантнее, чем быстрый взлом, который я опубликовал ниже.

Я вообще использую этот подход ...

// prevent console errors on browsers without firebug
if (!window.console) {
    window.console = {};
    window.console.log = function(){};
}
 Simon East23 сент. 2011 г., 04:58
Мне нравится ваша версия Фрэнки, но я не уверен, что она работает безопасно во всех браузерах. Я помню, как использовал это и все еще получал случайные проблемы с одной из версий IE, возможно, потому чтоconsole Объект определяется только когда окно консоли открыто в IE9. Я думаю, что я должен был сделать «неопределенную» проверку, как предложил Энди Э.
 Frankie15 июн. 2013 г., 18:34
@ Симон, это поздно, как комментарий, но видел только сегодня. Решение Энди намного элегантнее, чем этот быстрый взлом, который я опубликовал. Вы должны использовать это вместо этого.

мощью кода ниже:

if(!window.console) {
    var console = {
        log : function(){},
        warn : function(){},
        error : function(){},
        time : function(){},
        timeEnd : function(){}
    }
}
 Radu Maris17 июн. 2014 г., 15:23
Чем это отличается от ответов Фрэнки или Энди_Е?
 Tim Holt24 сент. 2015 г., 18:40
Ответ Суреша лучше в том, что он также определяет другие методы, которые не будут определены вместе с log. Проверять, выписыватьсяdeveloper.mozilla.org/en-US/docs/Web/API/Console для полного списка всех функций, которые могут (или не могут) быть определены.
 Glenn Lawrence11 нояб. 2015 г., 11:54
Это не будет работать, если он вызывается из функции. Вместоvar console так должно бытьwindow.console или простоconsole
Решение Вопроса

Ни один, но вариант второй. Потерятьtry...catch и проверьте правильность существования консольного объекта:

if (typeof console == "undefined") {
    window.console = {
        log: function () {}
    };
}

console.log("whatever");
 jcolebrand26 окт. 2011 г., 00:54
Стоит ли тестировать typeof window.console, так как вы устанавливаете window.console позже? Или должно окно. удалить?
 Tim Down22 сент. 2010 г., 11:48
Предположительно, вы либо хотите сделатьthis.console = ... или жеvar console = ...? Как у вас сейчас, вы получите ошибку в строгом режиме ECMAScript 5.
 Andy E22 сент. 2010 г., 11:56
@Tim: спасибо, это был недосмотр. Я думаюwindow.console было бы лучше всего для мобильности.
 Tim Holt24 сент. 2015 г., 18:42
Обязательно проверьте решение Суреша ниже - он также определяет другие консольные методы, которые могут быть не определены. Увидетьdeveloper.mozilla.org/en-US/docs/Web/API/Console полный список всех доступных консольных методов и на что похожа поддержка браузера.
 Tim Down22 сент. 2010 г., 12:14
Переносимость в смысле способности переносить этот код в функцию, а не переносимость между средами?

Или в coffeescript:

window.console ?=
    log:-> #patch so console.log() never causes error even in IE.
window.console = window.console || {};
window.console.log = window.console.log || function() {};

Следующее достигнет того, что вы ищете:

window.console && console.log('foo');

Ваш ответ на вопрос