关于javascript: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中进行搜索。我没有找到这么有用的文章来了解它们之间的区别。

任何想法都会受到赞赏。


在常规浏览器上下文中,没有区别。 console是全局变量,所有全局变量都是window对象的属性。

1
console.log(console.log==window.console.log) // true

有一些警告,例如在浏览器中未运行时,或者是否已重新分配了控制台变量。 T.J. Crowder很好地解释了这一点。


如果您的意思是在默认的浏览器JavaScript环境中,则实际上没有提供任何内容,而windowconsole尚未被遮盖或重新分配。

在默认的浏览器JavaScript环境中,window是一个全局变量,它引用全局对象,该对象也是窗口对象。全局对象将大多数全局变量保存为属性(以前是全部,但在ES2015中已更改;由letconstclass创建的全局变量不是全局对象的属性)。但这在大多数非浏览器环境(例如,NodeJS使用global而不是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起作用:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    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.logwindow.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.logwindow.console之间的区别是什么。

    答案是-

    console.log用于记录日志(如您所知)。

    window.console检查控制台是否可用(truthy值),以便我们下次登录。(对于移动浏览器,它们不支持调试器/控制台)

    此代码中的通用模式是-

    window.console && console.log(open_date);

    基本上是-

    的短代码

    1
    2
    3
    if( window.console ) {
        console.log( open_date );
    }