JavaScript简介
JavaScript历史
客户端完成表单验证-
JavaScript是什么
ECMAScript + DOM + BOM- ECMAScript
- 由ECMA-262定义,提供核心语言功能
- DOM(document object model 文档对象模型)
- 提供访问和操作网页内容的方法和接口
- 针对XML但经过扩展用于HTML的应用程序编程接口(API),可以把整个页面映射为一个多层节点结构。
- 开发人员无需重新加载网页,就可以修改其外观和内容。
- DOM1级:映射文档借口
- DOM2级:views视图 events事件 style样式 traversal and range遍历和范围
- BOM(browswe object model 浏览器模型对象)
- 提供与浏览器交互的方法和接口
- ECMAScript
-
JavaScript与ECMAScript的关系
- web浏览器只是ECMAScript实现可能的宿主环境之一,两者无依赖关系。宿主环境提供ECMAScript的实现和扩展,如JavaScript。
JavaScript的不同版本
在HTML中使用JavaScript
- <script>元素
- 使用方式
直接在页面中嵌入或者包含外部文件。
只要不存在defer和async,浏览器都会按照<script>元素在页面中出现的先后顺序对它们依次进行解析。 - 标签位置
- 传统做法:放置<head>中,意味着必须等到全部JavaScript代码都被下载解析和执行完成之后才开始呈现内容,有可能会导致延迟。
- 现代web应用程序一般都会把全部JavaScript引用放在<body>元素中页面内容的后面,这样显示空白页面的时间会缩短。
- 6个属性:
- 使用方式
属性 | 作用 |
---|---|
async | 立即下载脚本(只对外部脚本有效)异步执行 |
charset | 字符集(大多数浏览器会忽略) |
defer | 延迟到文档完全被解析和显示之后执行(只对外部脚本有效) |
src | 包含要执行代码的外部条件 |
language | 已废弃 |
type | 脚本语言类型,默认为text/javascript |
- 嵌入代码与外部文件
- 外部条件的优点
- 可维护性:HTML和JavaScript代码分离,结构和逻辑行为分离
- 可缓存:文件只需下载一次
- 适应未来
- 外部条件的优点
变量、作用域和内存问题
基本类型
- Undefined
- Null
- Number
- Boolean
- String
注意
- 不能给基本类型添加属性
- 函数参数按值传递(见以下例子)
function setName(obj) {
obj.name = "Nicholas";
obj = new Object();
obj.name = "Greg";
}
var person = new Object();
setName(person);
alert(person.name); // "Nicholas"
上述例子中,创建了一个对象,并将其保存在变量 person 中。然后,这个变量被传递到 setName() 函数中之后就复制给了 obj (注意不是引用)。
在这个函数内部,obj 和 person 引用的是同一个对象(即使是按值传递)。
然而当函数内部 重写 obj 时,这个变量引用的就是一个局部对象了。而这个局部对象会在函数执行完毕后立刻被销毁。
检测类型
- typeof 检测基本类型
- instanceof 检测引用类型
执行环境及作用域
- 执行环境仅分为全局和局部(函数)
- JavaScript 没有块级作用域
垃圾回收
JavaScript 是一门具有自动垃圾收集机制的编程语言,因而我们不必关心内存分配和回收问题。
目前主流的垃圾收集算法是“标记清除”。