簡體   English   中英

檢測window.console存在的正確方法是什么?

[英]What is the proper way to detect the presence of window.console?

我有這段代碼:

            var has_logger = (window.console && window.console.log);
            if (has_logger) {
                window.console.log(data);
            }

has_logger ,而不是一個布爾值,實際上初始化為一個函數對象( function log() { [native code] }

我的問題:

  • 在現代瀏覽器中無需測試console.log,對嗎?

  • has_logger初始化為布爾值而不是函數對象的正確方法是什么?

如果未啟用Firebug,則如果不進行檢查,Firefox將拋出錯誤。

var has_logger = !!(window.console && window.console.log);

將始終是布爾值。

是的,這是一種非常好的測試方法,是的,你必須測試。 請注意,你的has_logger變量實際上最終會引用該函數,所以你可以使用double-bang將它變成一個布爾值,正如Amadan所說。

但要注意IE9在console.log周圍的奇怪行為

但是,如果您希望代碼在除瀏覽器之外的其他JavaScript環境中工作,則可以使用以下代碼:

has_logger = typeof console === "object" && console.log;

即使沒有定義,您也可以安全地測試免費引用的類型 這將適用於瀏覽器(您有window )和其他環境(您沒有)。

通常,當其他瀏覽器中不存在console.log功能時,我仍然希望在某處輸出結果。 我每次想要寫入日志時都沒有if語句,而是創建了以下一些javascript,它將一個console.log方法添加到窗口對象(當它尚不存在時)。 這意味着在我的代碼中我想使用console.log,我可以這樣做而不用擔心它在其他瀏覽器中破壞。

(function () {
        if (typeof window.console !== "object")
            window.console = {
                log: function (message) {
                    // Write the message somewhere in browsers that don't support console.log
                }
            };
    } ());

由於我使用jQuery,我使用以下內容將每條消息寫入div。

$(function () {

    (function () {
        if (typeof window.console !== "object")
            window.console = {
                log: function (message) {
                    $('<div>' + message + '</div>').appendTo('#consoleArea');
                }
            };
        } ());
});

Firefox 3.6及更早版本沒有window.console 我不知道你認為那是現代的。

對於第二個問題,JavaScript中的&&運算符不返回布爾值; 它返回其左側表達式(如果它是假的)或其右側表達式(如果左側不是假的)。 如果你因某種原因確實想要一個布爾值,請使用!!(whatever-value)

所有人都會給你一個布爾:

var has_logger = (window.console && window.console.log) ? true : false;
var has_logger = new Boolean(window.console && window.console.log);
var has_logger = !!(window.console && window.console.log);

這是我最近提出的試圖完全防彈的內容......我希望如果我錯過了什么,大家會告訴我的。 除非log是一個函數,否則它似乎可以防止引用錯誤並且是錯誤的。 如果有人將一些其他函數附加到window.console.log,它會拋出一個錯誤,那么就沒有人能做到這一點。

var hasLog = !!("console" in window && 
                window.console && 
                "log" in window.console && 
                window.console.log && 
                typeof window.console.log == 'function')

我在閱讀https://stackoverflow.com/a/3390426/1172174后想出了這個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM