[JS红宝书笔记]什么是JS

568 阅读4分钟

序言

鄙人的JS学习途径大多都是通过视频和项目中来的,好像很多都会,但向他人分享时,却又说不出个所以然来。这种感觉十分不适,便去拜读了各大佬的帖子,都建议需要系统性的学习,其中阅读书籍这个慢工出细活的学习途径是我目前很少尝试的。索性买本书,踏踏实实的学习,作下笔记。先从这本 JS 红宝书(JavaScript 高级程序设计 第四版)开始吧。

MIND

简短历史

JavaScript 是作为处理简单数据验证为目的而诞生的语言,由网景公司的 Brendan Eich 工程师于 1995 年开发。其本名为 MoCha,再改名为 LiveScript,后来炒 Java 的热度又改名为 JavaScript。

作为网景的老对手微软也不甘示弱,于 1996 年发布竞品 JScript 搭载在自家 IE 上。两大浏览器厂商的大动作无疑推动了 JavaScript 的发展。

但 JavaScript 繁荣的背后,更大的问题浮出水面:两种版本并存,没有标准化。开发者因此需要学习两种版本语言,并在同一浏览器上用两种版本实现相同效果,无疑加大开发难度,这样的开发场景会阻碍 JavaScript 的长久发展。

好在 1997 年,ECMA(欧洲计算机协会)承担了 JavaScript 标准化的重任,在数月时间的打磨下, ECMAScript 应运而生,作为 JavaScript 的实现依据,正被各家浏览器广泛采用。

JavaScript 实现

当初刚入门的时候,不太弄得清楚 JavaScript 和 ECMAScript 有何区别,其实两者是同义词,但 JavaScript 不限于 ECAMScript,它包括:

  • 核心 (ECMAScript)
  • 文档对象模型 (DOM)
  • 浏览器对象模型 (BOM)

ECMAScript

上文提及了 ECAMScript 作为 JavaScript 的标准,是 JavaScript 的实现依据。其自身并不限于浏览器,它的宿主环境还有服务器端 Nodejs 和 Adobe Flash。

ECAMScript 自第一版发布直今,已经经历了 11 版,其中 第六版,也就是 ES6,是该规范有史以来最重要的一批增强特性,该版本正式支持了类、模块、迭代器、箭头函数、期约、反射、代理和众多的新数据类型。该书也是根据 ES6 进行了重写。

DOM

文档对象模型是一个应用编程接口(API),用于在 HTML 中使用扩展的 XML。

DOM 的由来

上文提及网景和微软两家各自为营,不仅在 JavaScript 的标准上不一致,其旗下浏览器更是支持不同形态的动态 HTML(DHTML,可做到不刷新页面而修改页面外观和内容),破坏了统一性。为了保证统一性,W3C(万维网)指定了 DOM 标准。

DOM 的作用

DOM 将整个页面抽象为一组分层节点,这些节点组成的文档树,可以让开发者控制网页的内容和结构,从而轻松地实现节点的增删改换。

DOM 级别

自 DOM Level0(IE4支持的DHTML)以来,到 DOM4,W3C 就不再维护 DOM 了。每一级都在原有基础上增加了模块:

  • DOM0:DHTML
  • DOM1:目的是映射文档结构
    • DOM Core:映射 XML 文档,方便访问和操作文档
    • DOM HTML:扩展 Core,增加特定于 HTML 的对象和方法
  • DOM2:支持新的接口
    • DOM 视图:描述追踪文档不同视图的接口
    • DOM 事件:描述事件及事件处理的接口
    • DOM 样式:描述处理元素 CSS 样式的接口
    • DOM 遍历和范围:描述遍历和操作 DOM 树的接口
  • DOM3:扩展 DOM
    • 统一加载和保存文档的方法
    • 验证文档的方法
  • DOM4:替代 Mutation Events 的 Mutation Observers

BOM

浏览器对象模型,用于支持访问和操作浏览器的接口。

BOM 作为 JavaScript 的最后一个实现,其主要针对的是浏览器窗口和子窗口,比如 window 对象和 navigator 对象。

BOM 与 DOM 的不同点,也是 BOM 最独一无二的地方就是 “它是唯一一个没有相关标准的 JavaScript 实现”,这个特点导致了混乱--BOM 很长时间都没有标准,很多浏览器有自己的“两把刷子”。好在 HTML5 的出现改善了这一现象,它以正式规范的形式涵盖了尽可能多的 BOM 特性。

总结

这一章节主要是介绍 JavaScript 的相关背景和三个实现,了解一下即可。