刚接受采访。问我的第一个问题是console.log()
。我非常自信地回答。再次,
第二个问题是,window.console.log()
和console.log()
之间有什么区别。我无言以对。尝试在Google和Stack Overflow中搜索。我没有找到这样有用的帖子来理解它们之间的区别。
非常感谢任何想法。
答案 0 :(得分:38)
在普通的浏览器环境中,没有区别。 console
是一个全局变量,所有全局变量都是window
对象的属性。
console.log(console.log==window.console.log) // true
有一些注意事项,例如未在浏览器中运行,或者是否已重新分配控制台变量。 T.J. Crowder很好地解释了。
答案 1 :(得分:34)
如果您的意思是在默认的浏览器JavaScript环境中,实际上没有提供 window
且console
未被遮蔽或重新分配。
在默认浏览器JavaScript环境中,window
是一个全局对象,它引用全局对象,也是窗口对象。全局对象将大多数全局变量保存为属性(以前它是全部,但在ES2015中已更改;由let
,const
或class
创建的全局变量不是全局对象的属性) 。但是在大多数非浏览器环境中都不是这样(例如,NodeJS使用global
而不是window
),甚至在某些非默认浏览器环境中(例如网络工作者的环境,没有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();
答案 2 :(得分:1)
console.log
和window.console.log
之间没有区别。
检查MDN。他们明确引用 -
可以从任何全局对象Window on访问Console对象 浏览范围,WorkerGlobalScope及其特定的变体 工人通过物业控制台。它被公开为
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 );
}