window.console有什么作用?

时间:2013-08-01 21:32:14

标签: javascript jquery

我正在尝试理解教程中的一些代码,并且有一行:

window.console && window.console.timeEnd && console.timeEnd('Generated In');

这会在JavaScript / jQuery中做什么?

8 个答案:

答案 0 :(得分:3)

这里有趣的是&&运算符。它说“如果左手是假的,则返回该值;如果是,则执行右侧并返回该值”。关键是,如果左侧是假的,则不执行右侧。这称为短路,可用于短手条件。

在这种情况下,您的代码:

window.console && window.console.timeEnd && console.timeEnd('Generated In');

相当于:

if (window.console) {
    if (window.console.timeEnd) {
        console.timeEnd('Generated In');
    }
}

因此,在尝试调用该函数并可能获得window.console之前,查看window.console.timeEndReferenceError属性是否存在是一项测试。

答案 1 :(得分:0)

window.console由各种浏览器实现。我不认为你可以指望它存在,这就是为什么这个表达式在调用它的方法之前检查它的存在。

查看chrome的文档,了解一个实现的所有细节: https://developers.google.com/chrome-developer-tools/docs/console

答案 2 :(得分:0)

如果先前已启动此计时器,则会停止计时器。 window.console&& window.console.timeEnd是检查以确保window.console和window.console.timeEnd对象存在,因为并非所有浏览器都支持它。

你可以在这里阅读更多关于计时器的https://developer.mozilla.org/en-US/docs/Web/API/console.time?redirectlocale=en-US&redirectslug=DOM%2Fconsole.time,你可以看到IE中不支持window.console.timeEnd,这就是为什么这些检查到位的原因。

答案 3 :(得分:0)

这里发生了什么......基本上。如果window.console存在,并且window.console.timeEnd存在,请运行console.timeEnd(' GeneratedIn');

你和&&&是一种我只在javascript中看到的只有当它存在必需条件时调用函数的方式。因此,如果window.console.timeEnd不存在,那么语句就会在那里结束,而不是继续执行会导致错误输出的函数。

这是一个非常相似的问题:How && works in JavaScript if isn't in a control statement?

答案 4 :(得分:0)

结束名为'Generated In'的计时器。 window.console检查控制台是否存在,window.console.timeEnd检查timeEnd函数是否存在,最后一个语句是该函数的执行。

&&运算符只是确保先前的语句已评估为true。只要其中一个不成立,JavaScript就会停止评估,因为在这种情况下,整个事情都不会再成为现实。

答案 5 :(得分:0)

window.console对象提供日志记录和&调试功能。如果打开控制台窗口(Ctrl-Shift-J或Command-Option-J),您将看到控制台输出。

timeEnd方法提供了计时功能。有关详细信息,请参阅MDN documentation

此特定构造在调用之前检查console对象和timeEnd方法是否存在。 JavaScript有short-circuit evaluation,因此如果window.console为假,window.console.timeEnd永远不会被评估(如果是,则会失败),如果window.console.timeEnd为假,{{1永远不会被调用(如果是,它会失败)。换句话说,这是一种启动计时器以进行调试的超级安全方式。

可能采用这种方法的一个原因是IE的旧版本没有定义控制台对象,除非您正在调试。这将在您的脚本中创建不可见的运行时错误,这很糟糕。

解决此问题的另一种方法(我更喜欢的方法)是存根您打算使用的对象和函数。您在问题中询问的方法的问题是,每次调用console.timeEnd('Generated In')或任何控制台计时器功能时,您都必须执行相同的操作。罗嗦而低效!不是DRY!使用存根,您只需执行一次,然后您可以使用对象和方法,而无需担心它们不存在。例如:

console.log()

答案 6 :(得分:0)

console是一个调试对象,用于记录等。console.timeEnd()某些浏览器中公开的计时器结束函数(参见console.timeEnd at MDN)< / p>

上面的代码正在测试是否有一个console成员;如果是这样,它是否有timeEnd()方法?如果是这样,请打电话。

大致相当于:

if (window.console)
  if (window.console.timeEnd)
    window.console.timeEnd('Generated In');

答案 7 :(得分:0)

前两个表达式是检查以确保A.控制台对象存在且B.它有一个可以调用的方法。第3个表达式只是调用方法并传入一个字符串,以便用户可以在控制台中查看此输出并查看简单的计时结果。

代码看起来很奇怪,但是当你意识到它只是一种用来防止JavaScript异常发生的技术时。并非所有浏览器都可以使用控制台对象,因此在这些情况下代码将无法执行任何操作。

这是一种防御性的编码方式,如果由于控制台对象无法使用而无法运行,则可以。