window.console.log 和 console.log 有什么区别
What is the difference between window.console.log and console.log
刚面试完。问我的第一个问题是console.log()
是什么。我非常自信地回答。同样,
第二个问题,window.console.log()
和console.log()
有什么区别。我无语了。尝试在 Google 和 Stack Overflow 中搜索。我发现 post 对理解它们之间的区别没有太大帮助。
非常感谢任何想法。
在正常的浏览器上下文中,没有区别。 console
是一个全局变量,所有的全局变量都是window
对象的属性。
console.log(console.log==window.console.log) // true
有一些注意事项,例如在浏览器中不 运行 时,或者如果控制台变量已被重新分配。 解释得很好。
如果您的意思是在默认浏览器 JavaScript 环境中,实际上 none 提供了 window
和 console
避风港没有被跟踪或重新分配。
默认浏览器JavaScript环境下,window
是一个global,指的是全局对象,也就是window对象。全局对象将大部分全局变量作为属性保存(过去是全部,但在 ES2015 中发生了变化;由 let
、const
或 class
创建的全局变量不是全局对象的属性) .但在大多数非浏览器环境中(例如,NodeJS 使用 global
而不是 window
),甚至在某些非默认浏览器环境中(例如 web worker 的环境,它不没有 window
,因为他们无法访问 window)。因此,在未定义 window
的环境中,window.console.log
将失败,而 console.log
则不会(前提是环境提供全局 console
)。
为了理解其中的区别,让我们逐一研究:
console.log(...)
表示:
- JavaScript 引擎必须搜索标识符
console
的绑定,从当前执行上下文开始,然后是下一个,然后是下一个,直到它在全局范围内找到它.
- 然后它在结果对象上查找
log
属性。
- 然后调用它
window.console.log(...)
表示:
- JavaScript 引擎必须搜索标识符
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。他们清楚地引用 -
The Console object can be accessed from any global object, Window on
browsing scopes, WorkerGlobalScope, and its specific variants in
workers via property console. It's exposed as Window.console
, and
can be referenced as simply console
.
除此之外,问题还可能是-
console.log
和window.console
有什么区别。
答案是-
console.log
用于日志记录(如您所知)。
window.console
检查控制台是否可用(truthy
值)以便我们接下来可以登录。(如果是移动浏览器,它们不支持 debugger/console)
代码中的常见模式是-
window.console && console.log(open_date);
这基本上是 -
的短代码
if( window.console ) {
console.log( open_date );
}
刚面试完。问我的第一个问题是console.log()
是什么。我非常自信地回答。同样,
第二个问题,window.console.log()
和console.log()
有什么区别。我无语了。尝试在 Google 和 Stack Overflow 中搜索。我发现 post 对理解它们之间的区别没有太大帮助。
非常感谢任何想法。
在正常的浏览器上下文中,没有区别。 console
是一个全局变量,所有的全局变量都是window
对象的属性。
console.log(console.log==window.console.log) // true
有一些注意事项,例如在浏览器中不 运行 时,或者如果控制台变量已被重新分配。
如果您的意思是在默认浏览器 JavaScript 环境中,实际上 none 提供了 window
和 console
避风港没有被跟踪或重新分配。
默认浏览器JavaScript环境下,window
是一个global,指的是全局对象,也就是window对象。全局对象将大部分全局变量作为属性保存(过去是全部,但在 ES2015 中发生了变化;由 let
、const
或 class
创建的全局变量不是全局对象的属性) .但在大多数非浏览器环境中(例如,NodeJS 使用 global
而不是 window
),甚至在某些非默认浏览器环境中(例如 web worker 的环境,它不没有 window
,因为他们无法访问 window)。因此,在未定义 window
的环境中,window.console.log
将失败,而 console.log
则不会(前提是环境提供全局 console
)。
为了理解其中的区别,让我们逐一研究:
console.log(...)
表示:
- JavaScript 引擎必须搜索标识符
console
的绑定,从当前执行上下文开始,然后是下一个,然后是下一个,直到它在全局范围内找到它. - 然后它在结果对象上查找
log
属性。 - 然后调用它
window.console.log(...)
表示:
- JavaScript 引擎必须搜索标识符
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。他们清楚地引用 -
The Console object can be accessed from any global object, Window on browsing scopes, WorkerGlobalScope, and its specific variants in workers via property console. It's exposed as
Window.console
, and can be referenced as simplyconsole
.
除此之外,问题还可能是-
console.log
和window.console
有什么区别。
答案是-
console.log
用于日志记录(如您所知)。
window.console
检查控制台是否可用(truthy
值)以便我们接下来可以登录。(如果是移动浏览器,它们不支持 debugger/console)
代码中的常见模式是-
window.console && console.log(open_date);
这基本上是 -
的短代码if( window.console ) {
console.log( open_date );
}