随着JavaScript 开发的成熟,也出现了很多最佳实践。过去一度认为只是一种爱好的东西现在变成了正当的职业,同时还需要经历过去其他编程语言要做的一些研究,如可维护性、性能和部署。 JavaScript 中的可维护性部分涉及到下面的代码约定。 来自其他语言中的代码约定可以用于决定何时进行注释,以及如何进行缩进,不过JavaScript需要针对其松散类型的性质创造一些特殊的约定。 由于JavaSc
离线Web 应用和客户端存储数据的能力对未来的Web 应用越来越重要。浏览器已经能够检测到用户是否离线,并触发JavaScript 事件以便应用做出处理。可以指定在应用缓存中保存哪些文件以便离线时使用。对于应用缓存的状态及变化,也有相应的JavaScript API 可以调用检测。 本书还讨论了客户端存储的以下几方面内容。 以前,这种存储只能使用cookie 完成,cookie 是一小块可以客户端
JavaScript 中的函数非常强大,因为它们是第一类对象。使用闭包和函数环境切换,还可以有很多使用函数的强大方法。可以创建作用域安全的构造函数,确保在缺少new 操作符时调用构造函数不会改变错误的环境对象。 可以使用惰性载入函数,将任何代码分支推迟到第一次调用函数的时候。 函数绑定可以让你创建始终在指定环境中运行的函数,同时函数柯里化可以让你创建已经填了某些参数的函数。 将绑定和柯里化组合起来
Ajax 是无需刷新页面就能够从服务器取得数据的一种方法。关于Ajax,可以从以下几方面来总结一下。 负责Ajax 运作的核心对象是XMLHttpRequest(XHR)对象。 XHR 对象由微软最早在IE5 中引入,用于通过JavaScript 从服务器取得XML 数据。 在此之后,Firefox、Safari、Chrome 和Opera 都实现了相同的特性,使XHR 成为了Web 的一个事实标
JSON 是一个轻量级的数据格式,可以简化表示复杂数据结构的工作量。JSON 使用JavaScript 语法的子集表示对象、数组、字符串、数值、布尔值和null。即使XML 也能表示同样复杂的数据结果,但JSON 没有那么烦琐,而且在JavaScript 中使用更便利。 ECMAScript 5 定义了一个原生的JSON 对象,可以用来将对象序列化为JSON 字符串或者将JSON数据解析为Java
JavaScript 对XML 及其相关技术有相当大的支持。然而,由于缺乏规范,共同的功能却存在一些不同的实现。DOM2 级提供了创建空XML 文档的API,但没有涉及解析和序列化。既然规范没有对这些功能作出规定,浏览器提供商就各行其是,拿出了自己的实现方案。IE 采取了下列方式。 通过ActiveX 对象来支持处理XML,而相同的对象也可以用来构建桌面应用程序。 Windows 携带了MSXML
错误处理对于今天复杂的Web 应用程序开发而言至关重要。不能提前预测到可能发生的错误,不能提前采取恢复策略,可能导致较差的用户体验,最终引发用户不满。多数浏览器在默认情况下都不会向用户报告错误,因此在开发和调试期间需要启用浏览器的错误报告功能。然而,在投入运行的产品代码中,则不应该再有诸如此类的错误报告出现。 下面是几种避免浏览器响应JavaScript 错误的方法。 在可能发生错误的地方使用tr
HTML5 除了定义了新的标记规则,还定义了一些JavaScript API。这些API 是为了让开发人员创建出更好的、能够与桌面应用媲美的用户界面而设计的。本章讨论了如下API。 跨文档消息传递API 能够让我们在不降低同源策略安全性的前提下,在来自不同域的文档间传递消息。 原生拖放功能让我们可以方便地指定某个元素可拖动,并在操作系统要放置时做出响应。还可以创建自定义的可拖动元素及放置目标。 新
HTML5 的<canvas>元素提供了一组JavaScript API,让我们可以动态地创建图形和图像。图形是在一个特定的上下文中创建的,而上下文对象目前有两种。第一种是2D 上下文,可以执行原始的绘图操作,比如: 设置填充、描边颜色和模式 绘制矩形 绘制路径 绘制文本 创建渐变和模式 第二种是3D 上下文,即WebGL 上下文。WebGL 是从OpenGL ES 2.0 移植到浏览器中的,而O
虽然HTML 和Web 应用自诞生以来已经发生了天翻地覆的变化,但Web 表单相对却没有什么改变。使用JavaScript 可以增强已有的表单字段,从而创造出新的功能,或者提升表单的易用性。为此,表单、表单字段都引入了相应的属性和方法,以便JavaScript 使用。下面是本章介绍的几个概念。 可以使用一些标准或非标准的方法选择文本框中的全部或部分文本。 大多数浏览器都采用了Firefox 操作选
事件是将JavaScript 与网页联系在一起的主要方式。“DOM3 级事件”规范和HTML5 定义了常见的大多数事件。即使有规范定义了基本事件,但很多浏览器仍然在规范之外实现了自己的专有事件,从而为开发人员提供更多掌握用户交互的手段。有些专有事件与特定设备关联,例如移动Safari 中的orientationchange 事件就是特定关联iOS 设备的。 在使用事件时,需要考虑如下一些内存与性能
DOM2 级规范定义了一些模块,用于增强DOM1 级。“DOM2 级核心”为不同的DOM类型引入了一些与XML 命名空间有关的方法。这些变化只在使用XML 或XHTML 文档时才有用;对于HTML 文档没有实际意义。除了与XML 命名空间有关的方法外,“DOM2 级核心”还定义了以编程方式创建Document 实例的方法,也支持了创建DocumentType 对象。 “DOM2 级样式”模块主要针
虽然DOM 为与XML 及HTML 文档交互制定了一系列核心API,但仍然有几个规范对标准的DOM进行了扩展。这些扩展中有很多原来是浏览器专有的,但后来成为了事实标准,于是其他浏览器也都提供了相同的实现。本章介绍的三个这方面的规范如下。 Selectors API,定义了两个方法,让开发人员能够基于CSS 选择符从DOM中取得元素,这两个方法是querySelector()和querySelec
客户端检测是JavaScript 开发中最具争议的一个话题。由于浏览器间存在差别,通常需要根据不同浏览器的能力分别编写不同的代码。有不少客户端检测方法,但下列是最经常使用的。 能力检测:在编写代码之前先检测特定浏览器的能力。例如,脚本在调用某个函数之前,可能要先检测该函数是否存在。这种检测方法将开发人员从考虑具体的浏览器类型和版本中解放出来,让他们把注意力集中到相应的能力是否存在上。能力检测无法精
浏览器对象模型(BOM)以window 对象为依托,表示浏览器窗口以及页面可见区域。同时,window对象还是ECMAScript 中的Global 对象,因而所有全局变量和函数都是它的属性,且所有原生的构造函数及其他函数也都存在于它的命名空间下。本章讨论了下列BOM的组成部分。 在使用框架时,每个框架都有自己的window 对象以及所有原生构造函数及其他函数的副本。每个框架都保存在frames