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

Rea*_*eal 2 javascript ecmascript-5 ecmascript-6

console不包括在列表中,但几乎可以在任何环境中使用。

附带说明一下,为什么console不像其他内置全局对象那样大写,例如NumberArray

Bam*_*ieh 6

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

控制台对象首先是由浏览器的调试工具介绍,萤火虫是第一次尝试制定控制台API一致的标准。

WHATWG(网络超文本应用技术工作组)在正在进行的早期作品console规格定义控制台的API的语义,企图在不同环境创建收敛。

console不包括在列表中,但几乎可以在任何环境中使用。

console由于以下原因,该对象在浏览器之间以某种方式保持一致:

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

  • Chrome 扩展了WebKit,它也被 Safari 使用。

  • Node.js 建立在V8之上,它定义了node 使用的控制台 API

目前,许多console方法是跨浏览器兼容的,但情况并非总是如此。检查兼容性表以查看差异。

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

就像其他浏览器特定的 API 一样,console被注入 javascript 以让开发人员访问浏览器 API,例如NodeDocument

以下是注入 javascript的完整Web API列表,可在浏览器的 JS 代码中访问。

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

实现window接口的 whatwg 规范提供的所有方法都没有大写检查窗口接口),因为这些方法都不是构造函数。

规范中还提到console由于历史原因而小写。然而,这说明是在谈论命名空间定义使用规范使用“控制台”,而不是“控制台”和公开的API。


小花絮:我记得以前console如果没有在 IE 上打开调试器,它会抛出错误。