[英]What is the difference between window.console.log and console.log
剛接受采訪。 第一個問題問我是什么是console.log()
。 我非常自信地回答。 再次,
第二個問題是, window.console.log()
和console.log()
之間有什么區別。 我無言以對。 嘗試在Google和Stack Overflow中搜索。 我沒有找到這樣有用的帖子來理解它們之間的區別。
任何想法都非常感謝。
在普通的瀏覽器環境中,沒有區別。 console
是一個全局變量,所有全局變量都是window
對象的屬性。
console.log(console.log==window.console.log) // true
有一些注意事項,例如未在瀏覽器中運行,或者是否已重新分配控制台變量。 TJ Crowder很好地解釋了這一點。
如果您的意思是在默認的瀏覽器JavaScript環境中,實際上沒有提供 window
和console
沒有被遮蔽或重新分配。
在默認瀏覽器JavaScript環境中, window
是一個全局對象,它引用全局對象,也是窗口對象。 全局對象將大多數全局變量保存為屬性(它曾經是全部,但在ES2015中已更改;由let
, const
或class
創建的全局變量不是全局對象的屬性)。 但是在大多數非瀏覽器環境中都不是這樣(例如,NodeJS使用global
而不是window
),甚至在某些非默認瀏覽器環境中(例如Web工作者的環境,它沒有window
因為它們可以'訪問窗口)。 因此,在未定義window
環境中, window.console.log
將失敗,而console.log
不會(如果環境提供全局console
)。
為了理解這些差異,讓我們通過以下方式工作:
console.log(...)
表示:
console
的綁定,然后搜索下一個綁定,然后搜索下一個,直到它在全局范圍內找到它。 log
屬性。 window.console.log(...)
表示:
window
的綁定,然后搜索下一個綁定,然后搜索下一個綁定,直到它在全局范圍內找到它。 console
屬性。 log
屬性。 例如,這是一個console
被遮蔽的示例,因此console.log
失敗而window.console.log
工作:
function foo() { var console = 42; try { console.log("You WON'T see this."); } catch (e) { } try { window.console.log("You WILL see this."); } catch (e) { } } foo();
console.log
和window.console.log
之間沒有區別。 檢查MDN 。 他們明確引用 -
可以通過屬性控制台從任何全局對象,瀏覽范圍上的Window,WorkerGlobalScope及其在工作程序中的特定變體訪問Console對象。 它作為
Window.console
公開,可以簡單地作為console
引用。
除此之外,問題可能還有 -
console.log
和window.console
之間有什么區別。
對此的答案是 -
console.log
用於記錄(如您所知)。
window.console
檢查控制台是否可用( truthy
值),以便我們可以記錄下一步。(在移動瀏覽器的情況下,它們不支持調試器/控制台)
代碼中的常見模式是 -
window.console && console.log(open_date);
這基本上是短代碼 -
if( window.console ) {
console.log( open_date );
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.