console
未包含在the list中,但是几乎可以在任何环境中使用。
顺便说一句,为什么console
不能像Number
或Array
这样的所有其他内置全局对象一样大写?
答案 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,例如Node
和Document
。
这里是注入到javascript中的完整web API的列表,可在浏览器上以JS代码进行访问。
为什么
console
不像其他所有内置全局对象一样大写?
whatwg规范提供的用于实现window
接口的所有方法均不大写(Check the window interface),因为这些方法都不是构造函数。
spec中还提到console
由于历史原因而被小写。但是,本注释讨论的是命名空间定义,它使用规范中使用的“控制台”代替“控制台”,并且不公开的API。
有趣的事实:我记得console
在IE上debugger was not opened曾经抛出错误的时候。