Table of Contents
第一章 JavaScript简介
JavaScript实现包括三部分:
- 核心,ECMAScript
- 文档对象模型,DOM
- 浏览器对象模型,BOM
ECMAScript
EcmaScript的常见宿主环境:
web浏览器,Node,Adobe Flash。
ECMA-262标准只定义了语言的基础,连输入输出都没有定义,输入输出由宿主环境提供。
DOM
DOM1级的目标主要是映射文档的结构。
DOM2级引入了下列新模块:
- DOM视图(DOM Views),定义了跟踪不同文档(例如,应用CSS之前和之后的文档)视图的接口;
- DOM事件(DOM Events),定义了事件和事件处理的接口;
- DOM样式(DOM Style),定义了基于CSS为元素应用样式的接口;
- DOM遍历和范围(DOM Traversal and Range),定义了遍历和操作文档树的接口;
DOM3进一步扩展了DOM,引入了:
- DOM Load and Save,以统一方式加载和保存文档的方法;
- DOM Validation,验证文档的方法;
- 支持XML 1.0规范,涉及XML Infoset,XPath和XML Base。
其他DOM标准
- SVG
- MathML
- SMIL,Synchronized Multimedia Integration Language,同步多媒体集成语言
BOM
从根本上讲,BOM只处理浏览器窗口和框架,但习惯上人们也把针对浏览器的一些JavaScript扩展算作DOM的一部分:
- 弹出新浏览器窗口;
- 移动、缩放和关闭浏览器窗口;
- 提供浏览器详细信息的navigator对象;
- 提供浏览器所加载页面详细信息的location对象;
- 提供用户显示器分辨率详细信息的screen对象;
- 对cookies的支持;
- 像XMLHttpRequest和IE的ActiveXObject这样的自定义对象。
BOM没有标准,每个浏览器有自己的实现。
第二章 在HTML中使用JavaScript
HTML4.01为<script>元素定义的6个属性:
- async,表示应该立即下载该脚本,但不应妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本;只对外部脚本文件有效;
- charset,表示通过src属性指定的代码的字符集。大多数浏览器会忽略它的值。
- defer,表示脚本可以延迟到文档完全被解析和显示之后再执行,只对外部脚本文件有效。
- language,已废弃,表示编写代码使用的脚本语言。
- src,表示包含要执行代码的外部文件。
- type,可选,language属性的替代属性,考虑到最大兼容性应该使用”text/javascript”,也可以不指定这个属性,默认值仍然是”text/javascript”。
javascript代码的嵌入方式
第一种直接将代码写在<script>标签内,浏览器是按顺序解析整个页面内容的,所以在解释器对<script>元素内部的所有代码求值完毕以前,不会加载和显示页面中的其余内容。代码中不能直接包含</script>这个字符串,而必须转义,写成<\/script>。
第二种是通过src属性包含外部javascript文件,此时<script>标签内部的代码将会忽略。解析src属性引入的外部代码文件时,页面的剩余部分也会暂停处理。如果是XHTML文档中,可以将<script>标签的闭合标签省略,直接写为:<script type=”text/javascript” src=”example.js” />。
无论如何包含代码,只要不存在defer和async属性,浏览器都会按照<script>元素在页面中出现的先后顺序对它们依次进行解析。
script标签的位置
<script>标签可以放在<head>标签里,或者放在</body>闭合标签前面,放在<head>标签里时会先加载javascript文件再显示页面内容(前提是没有设置defer或者async属性),放在</body>闭合标签前面会先显示页面内容再解析javascript文件。
defer属性
设置defer属性时,脚本会被延迟到整个页面都解析完毕后再执行(但是仍然会立即下载javascript文件)。按照HTML5规范,多个设置defer属性的脚本会按顺序执行,并且先于DOMContentLoaded事件执行,但是这个规范并不一定被严格遵守。所以最好只包含一个设置defer属性的脚本。
defer属性只适用于外部脚本文件。
早期浏览器不支持defer属性,所以把延迟脚本放在页面底部兼容性更好。
async属性
async属性只适用于外部脚本文件。
多个异步脚本之间不能假定执行顺序。
异步脚本不要在加载期间修改DOM(避免修改DOM时浏览器正在加载页面内容或者其他异步脚本在修改DOM)。
异步脚本一定会在页面的load事件前执行。
文档模式
可以通过doctype指定解析页面时使用的标准。
<!-- HTML 5 -->
<!DOCTYPE html>
文档模式分为混杂模式(quirks mode)和标准模式(standards mode)。还有一种准标准模式(almost standards mode),不过和标准模式也没什么大的区别。
<noscript>元素
如果浏览器不支持JavaScript,那么浏览器会显示页面中的<noscript>标签。<noscript>标签可以包含<script>以外的任何元素。
近期评论