认识 JavaScript

1 minute read

这篇博文是关于《JavaScript高级程序设计(第3版)》(经典的红宝书)的读书笔记。

学习 JavaScript 我们多会听到另一个词 ECMAScript,它和 JavaScript 的关系是,ECMAScript 是“伪语言”,而 JavaScript 是对 ECMAScript 的一个实现。

几个特点

  1. 函数优先:由于编译器的作用,函数声明和变量声明都会被提升,但函数会首先被提升,然后才是变量。
  2. 轻量级解释型或即时编译型:即 JavaScript 不能被机器直接执行,需要解释或编译为机器语言。
  3. 可应用于浏览器或非浏览器环境,后者包括 Node.js、 Apache CouchDB 和 Adobe Acrobat。
  4. 基于原型编程:在原型编程中,类不是实时的,而且行为重用是通过复制已经存在的原型对象的过程实现的。
  5. 多范式:支持面向对象、命令式和函数式。
  6. 动态脚本语言:新的函数可以被引进,已有的函数可以被删除,类型在运行时检查。

知识点

接下来说说 JavaScript 的知识点,以下是从红宝书总结而来的:

  1. 在 HTML 中使用 JavaScript:当初开发 JavaScript 的时候,有一个重要问题就是如何做到让 JavaScript 既能与 HTML 页面共存,又不影响那些页面在其他浏览器中的呈现效果。最终的决定是为 Web 增加统一的脚本支持。
  2. 基本概念:​​​​​任何语言的核心都必然会描述这门语言最基本的工作原理。而描述的内容通常都要涉及这门语言的语法、操作符、数据类型、内置功能等用于构建复杂解决方案的基本概念。
  3. 变量、作用域和内存问题:​​​​​JavaScript 变量松散类型的本质,决定了它只是在特定时间用于保存特定值的一个名字而已。由于不存在定义某个变量必须要保存何种数据类型值的规则,变量的值及其数据类型可以在脚本的生命周期内改变。​​​​​
  4. 引用类型:​​​​​在 ECMAScript 中,引用类型是一种数据结构,用于将数据和功能组织在一起。它也常被称为类,但这种称呼并不妥当。尽管 ECMAScript 从技术上讲是一门面向对象的语言,但它不具备传统的面向对象语言所支持的类和接口等基本结构。引用类型有时候也被称为对象定义,因为它们描述的是一类对象所具有的属性和方法。
  5. 面向对象的程序设计:​​​​​面向对象(Object-Oriented,OO)的语言有一个标志,那就是它们都有类的概念。ECMAScript 中没有类的概念,因此它的对象也与基于类的语言中的对象有所不同。我们可以把 ECMAScript 的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数。
  6. 函数表达式:​​​​​函数表达式是 JavaScript 中的一个既强大又容易令人困惑的特性。定义函数的方式有两种:一种是函数声明,另一种就是函数表达式。​​​​​
  7. BOM:​​​​​ECMAScript 是 JavaScript 的核心,但如果要在 Web 中使用 JavaScript,那么 BOM(浏览器对象模型)则无疑才是真正的核心。BOM 提供了很多对象,用于访问浏览器的功能,这些功能与任何网页内容无关。​​​​​
  8. 客户端检测:​​​​​即使是那些跨平台的浏览器,虽然从技术上看版本相同,也照样存在不一致性问题。检测 Web 客户端的手段很多,而且各有利弊。但最重要的还是要知道,不到万不得已,就不要使用客户端检测。只要能找到更通用的方法,就应该优先采用更通用的方法。​​​​​
  9. DOM:​​​​​DOM(文档对象模型)是针对 HTML 和 XML 文档的一个 API(应用程序编程接口)。DOM 描绘了一个层次化的节点树,允许开发人员添加、移除和修改页面的某一部分。​​​​​DOM 1 级主要定义的是 HTML 和 XML 文档的底层结构。​​​​​
  10. DOM 扩展:​​​​​对 DOM 的两个主要的扩展是 Selectors API(选择符API)和 HTML5。此外,还有一个不那么引人瞩目的 Element Traversal(元素遍历)规范,为 DOM 添加了一些属性。​​​​​
  11. DOM 2 和 DOM 3:​​​​​DOM 2 和 DOM 3 级比 DOM 1 级引入了更多的交互能力,也支持了更高级的XML特性,分为许多模块(模块之间具有某种关联),分别描述了DOM的某个非常具体的子集,包括 DOM 2 的核心、视图、事件、样式、遍历和范围、HTML 和 DOM 3 的 XPath 和加载与保存。​​​​​
  12. 事件:​​​​​JavaScript 与 HTML 之间的交互是通过事件实现的。事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间。这种在传统软件工程中被称为观察员模式的模型。事件最早是作为分担服务器运算负载的一种手段。浏览器对象模型(BOM)也支持一些事件,这些事件与文档对象模型(DOM)事件之间的关系并不十分清晰,因为BOM事件长期没有规范可以遵循。
  13. 表单脚本:​​​​​JavaScript 最初的一个应用,就是分担服务器处理表单的责任,打破处处依赖服务器的局面。尽管目前的 Web 和 JavaScript 已经有了长足的发展,但 Web 表单的变化并不明显。由于 Web 表单没有为许多常见任务提供现成的解决手段,很多开发人员不仅会在验证表单时使用 JavaScirpt,而且还增强了一些标准表单控件的默认行为。​​​​​
  14. 使用 Canvas 绘图:​​​​​这个元素负责在页面中设定一个区域,然后就可以通过 JavaScript 动态地在这个区域中绘制图形。与浏览器环境中的其他组件类似,canvas 由几组API构成,但并非所有浏览器都支持所有这些API。​​​​​
  15. HTML 5 脚本编程:​​​​​本书前面讨论过,HTML 5 规范定义了很多新 HTML 标记。为了配合这些标记的变化,HTML5 规范也用显著篇幅定义了很多 JavaScript API。定义这些 API 的用意就是简化此前实现起来困难重重的任务,最终简化创建动态 Web 界面的工作。​​​​​
  16. 错误处理与调试:​​​​​脚本出错时,浏览器通常会给出类似于 “object expected”(缺少对象)这样的消息,没有上下文信息,让人摸不着头脑。ECMAScript 第 3 版致力于解决这个问题,专门引入了 try-catch 和 throw 语句以及一些错误类型,意在让开发人员能够适当地处理错误。
  17. JavaScript 与 XML:​​​​​曾几何时,XML 一度成为存储和通过因特网传输结构化数据的标准。DOM 规范的制定,不仅是为了方便在 Web 浏览器中使用 XML,也是为了在桌面及服务器应用程序中处理 XML 数据。此前,由于浏览器无法解析 XML 数据,很多开发人员都要动手编写自己的 XML 解析器。而自从DOM出现后,所有浏览器都内置了对 XML 的原生支持(XML DOM),同时也提供了一系列相关的技术支持。
  18. E4X(ECMAScript for XML):为处理 XML 定义了新的语法,也定义了特定于 XML 的对象。已废弃
  19. JSON(JavaScript Object Notation):曾经有一段时间,XML是互联网上传输结构化数据的事实标准。然而不少人认为 XML 过于烦琐、冗长。JSON 是在 JavaScript 中读写结构化数据的更好的方式。关于 JSON,最重要的是要理解它是一种数据格式,不是一种编程语言。JSON 并不从属于 JavaScript。不是只有 JavaScript 才使用 JSON,很多编程语言都有针对 JSON 的解析器和序列化器。​​​​​
  20. Ajax(Asynchronous JavaScript and XML):这一技术能够向服务器请求额外的数据而无须卸载页面,会带来更好的用户体验。Ajax 技术的核心是 XMLHttpRequest (XHR)对象,XHR 为向服务器发送请求和解析服务器响应提供了流畅的接口。Ajax 通信与数据格式无关,从服务器取得的数据不一定是 XML 数据。
  21. 高级技巧:JavaScript 是一种极其灵活的语言,除了过程方式和面向对象方式,还有更为复杂和有趣的模式。包括高级函数、防篡改对象、高级定时器、自定义事件和拖放。
  22. 离线应用与客户端存储:所谓离线 Web 应用,就是在设备不能上网的情况下仍然可以运行的应用。​​​​​开发离线 Web 应用需要几个步骤。首先是确保应用知道设备是否能上网,以便下一步执行正确的操作。然后,应用还必须能访问一定的资源(图像、JavaScript、CSS等),只有这样才能正常工作。最后,必须有一块本地空间用于保存数据,无论能否上网都不妨碍读写。
  23. 最佳实践:Web 开发从过去还都凑合的现象演化成了完整的研究规范。规范包括可维护性、性能和部署。
  24. 新兴的 API:包括 requestAnimationFrame、Page Visibility API、Geolocation API、File API、Web 计时、Web Workers。这些 API 没有包含在 HTML 5 中,但是属于 HTML 5 相关的 API。

学习笔记

另外博主还做了关于这本书的一些知识笔记,这些笔记是博主大概两年前阅读红宝书时整理的,基本都是思维导图,一直放在个人笔记里。现在将它们整理放到博客里,便于分享:

  1. 基本概念
  2. 变量和作用域
  3. 传递参数
  4. JSON
  5. 引用类型之 String 类型
  6. 引用类型之 RegExp 类型
  7. 引用类型之 Object 类型
  8. 引用类型之 Number 类型
  9. 引用类型之 Math 对象
  10. 引用类型之 Date 类型
  11. 引用类型之 Array 类型
  12. DOM
  13. DOM 扩展
  14. DOM 2 和 DOM 3
  15. BOM
  16. 事件
  17. 高级定时器
  18. 数据存储
  19. 创建对象
  20. 继承

Updated:

Leave a comment