// https://tc39.es/ecma262/multipage/ecmascript-data-types-and-values.html#sec-well-known-intrinsic-objects
let IntrinsicObjects = new Set();
document.querySelector('#table-7').querySelectorAll('td:nth-child(2)').forEach(item => {
let name = item.innerText.split('.')[0];
if (name) {
IntrinsicObjects.add(name)
}
});
console.log(IntrinsicObjects); // 47个
今天我们来梳理下浏览器上的所有 API,即
window
的全局属性。以 Chrome 为例,在开发者工具的 Console 选项卡里执行
Object.getOwnPropertyNames(window)
共得到了 1020 个属性。我们知道,浏览器的 API 大致分为以下 4 类:
接下来,我们就逐类处理下。
JavaScript 固有对象
这部分由标准规定,是随着 JavaScript 运行时环境的创建而自动创建的对象实例。在任何 JavaScript 代码执行之前,它们就已经被创建好了,类似于基础库的角色。
在 ECMA262 标准中,可以找到 47 个“顶级”固有对象,过滤的脚本如下:
再加 3 个和 bigInt、4 个值属性、3 个内存管理和 5 个 Generator,一共 62 个。转成字符串方便查看,如下:
DOM API
DOM 标准主要定义了:
Event
的实例Node
的实例下面是与 DOM 标准相关的 window 全局属性(含部分事件和节点)。
CSSOM API
这部分主要对应 2 个标准:
此外,还有很多名字里包含“CSS”字符串的属性/接口,这里就不一一列出来了(详见文末附录),因为代码里可以直接用 string pattern 过滤掉。
HTML 相关
这部分主要分为:
HTMLSpec_Window
变量里的内容HTMLSpec_Others
变量里的内容WHATWG 的其它标准
ECMA402
W3C 的其它标准
其它组织
过滤完以上提到的所有内容,还剩 41 个属性,它们有些是已经废弃/过时了的,有些是尚未标准化的,具体内容详见源码,代码的运行结果如下图所示。
总结
本文介绍并梳理了浏览器的所有 API 及其对应标准,旨在对其有个概况性的认识。
主要标准
扩展阅读
附录