JavaScript:为什么控制台不被视为标准的内置对象?

时间:2018-08-29 05:50:10

标签: javascript ecmascript-6 ecmascript-5

console未包含在the list中,但是几乎可以在任何环境中使用。

顺便说一句,为什么console不能像NumberArray这样的所有其他内置全局对象一样大写?

1 个答案:

答案 0 :(得分:4)

ECMA-262没有定义console,因为ECMA-262没有I / O概念。只需每个浏览器即可实现/注入自己的console实现。

console对象是由浏览器调试工具首次引入的,Firebug是第一个尝试为控制台api制定一致标准的对象。

WHATWG(Web超文本应用程序技术工作组)有一个正在进行的console规范,用于定义控制台API的语义,以尝试在环境之间实现融合。

  

console未包含在the list中,但是几乎可以在任何环境中使用。

由于以下原因,console对象在浏览器之间具有某种一致性:

  • 浏览器和Node.js都分别遵循WHATWG控制台规范。

  • Chrome扩展了Safari也使用的 WebKit

  • Node.js构建在 V8 之上,该版本定义了节点使用的console API

当前,许多console方法都是跨浏览器兼容的,但是并非总是如此。检查compatibility table来查看差异。

可以说,每个console实现都基于其所服务的环境(芯片,服务器,浏览器等)而有所不同。因此,在ECMA中对其进行标准化并不是完全有意义。

与其他浏览器特定的API一样,console被注入到javascript中,以使开发人员可以访问浏览器API,例如NodeDocument

这里是注入到javascript中的完整web API的列表,可在浏览器上以JS代码进行访问。

  

为什么console不像其他所有内置全局对象一样大写?

whatwg规范提供的用于实现window接口的所有方法均不大写Check the window interface),因为这些方法都不是构造函数。

spec中还提到console由于历史原因而被小写。但是,本注释讨论的是命名空间定义,它使用规范中使用的“控制台”代替“控制台”,并且公开的API。


有趣的事实:我记得console在IE上debugger was not opened曾经抛出错误的时候。