JavaScript是一种专为网页交互而设计的脚本语言,由下列三个不同的部分组成:
- 核心(ECMAScript),由ECMA-262定义,提供核心语言功能;
- 文档对象模型(DOM),提供访问和操作网页内容的方法和接口;
- 浏览器对象模型(BOM),提供与浏览器交互的方法和接口。
1、ECMAScript
规定了这门语言的下列组成部分:
2、文档对象模型(DOM)
DOM是针对XML但经过扩展用于HTML的应用程序编程接口(API, Application Programming Interface)。
DOM把整个页面映射为一个多层节点结构。
DOM级别:
主要用于映射文档的结构。
由两个模块组成:DOM核心(DOM Core) 和DOM HTML
在原来DOM的基础上又扩充了鼠标和用户界面事件、范围、遍历(迭代DOM文档的方法)等细分模块,而且通过对象接口增加了对CSS的支持。
引入新模块:
-
- DOM视图:定义了跟踪不同文档视图的接口;
- DOM事件:定义了事件和事件处理的接口;
- DOM样式:定义了基于CSS为元素应用样式的接口;
- DOM遍历和范围:定义了遍历和操作文档的接口。
- DOM3级:
引入了以统一方式加载和保存文档的方法——在DOM加载和保存(DOM Load and Save) 模块中定义;
新增了验证文档的方法——在DOM验证(DOM Validation)模块中定义。
3、浏览器对象模型(BOM)
根本上讲,BOM只是处理浏览器窗口和框架;
习惯上,也把所有针对浏览器的JavaScript扩展算作BOM的一部分:
- 弹出新浏览器窗口的功能
- 移动、缩放和关闭浏览器窗口的功能
- 提供浏览器详细信息的navigator对象
- 提供浏览器所加载页面的详细信息的location对象
- 提供用户显示器分辨率详细信息的screen对象
- 对cookies的支持
- 像 XMLHttpRequest 和 IE 的 ActiveXObject 这样的自定义对象
在HTML中使用JavaScript
1、<script>元素
向HTML页面中插入JavaScript的主要方法,就是使用<script>元素。
方式有两种:
例如:<script type = "text/javascript"
src="example.js"></script>
外部引用的优点:
- 可维护性
- 可缓存
- 适应未来
无论是直接嵌入还是外部引入,只要不存在defer 和 async 属性,解释器对JavaScript代码是从上至下依次解析的。在解析完成之前,页面中的其余内容都不会被浏览器加载或显示。
2、标签的位置
传统做法是将所有<script>元素都放在页面的<head>元素中。对于那些需要很多JavaScript代码的页面来说,会导致浏览器在呈现页面时出现明显的延迟,而延迟期间的浏览器窗口一片空白。为了避免这一问题,一般把全部JavaScript引用放在<body>元素中页面内容的后面。
3、延迟脚本
例子:<script type="text/javascript" defer="defer" src="example.js"></script>
defer属性只适用于外部js文件。
用途是表明脚本在执行时不会影响页面的构造。即,脚本会被延迟到整个页面都解析完毕后再运行。
有些浏览器会忽略这个属性,所以,把延迟脚本放在页面底部仍是最佳选择
4、异步脚本
例子:<script type="text/javascript" async src="example1.js"></script>
<script type="text/javascript" async src="example2.js"></script>
async 属性也只适用于外部js文件。
指定async属性的目的是不让页面等待这两个脚本的下载和执行,从而异步加载页面的其他内容。因此,建议异步脚本不要在加载期间修改DOM。
☞:标记为async的脚本并不保证按照他们的先后顺序执行,因此,要确保两者之间互不依赖。
5、<noscript>元素
使用<noscript>元素可以指定在不支持脚本的浏览器中显示替代的内容,从而实现让网页平稳退化。
包含在 <noscript>元素中的内容只有在以下两种情况下才会显示出来:
在启用脚本的情况下,浏览器中不会显示 <noscript>元素中的任何内容。
<body>
<noscript>
<p>本页面需要浏览器支持(并启用)JavaScript</p>
</noscript>
</body>