ECMAScript
ECMA-262定义的ECMAScript与Web浏览器没有依赖关系。实际上,这门语言本身并不包含输入和输出定义。ECMA-262定义的只是这门语言的基础,而在此基础智商可以构建更完善的脚本语言。
ECMA-262规定了这门语言的组成部分:
- 语法
- 类型
- 语句
- 关键字
- 保留字
- 操作符
- 对象
ECMAScript 就是对实现该标准规定的各个方面内容的语言的描述。
文档对象模型(DOM)
Document Object Model,是针对XML但经过扩展用于HTML的应用程序编程接口(API,Application Programming Interface)。
DOM级别
- DOM1由两个模块组成:DOM核心(DOM Core)和 DOM HTML
- DOM2引入:
- DOM视图:定义了跟踪不同文档
- DOM事件:定义了事件和事件处理的接口
- DOM样式:定义了基于CSS为元素应用样式的接口
- DOM遍历和范围:定义了遍历和操作文档树的接口
- DOM3引入:
- 以统一方式加载和保存文档的方法:在DOM加载和保存模块中定义;
- 新增了验证文档的方法:在DOM验证模块中定义。
浏览器对象模型(BOM)
支持可以访问和操作浏览器窗口的浏览器对象模型(BOM,Browser Object MOdel)
JavaScript
JavaScript是一种专为与网页交互而设计的脚本语言,由下列三个不同的部分组成:
- ECMAScript,由 ECMA-262定义,提供核心语言功能;
- 文档对象模型(DOM),提供访问和操作网页内容的方法和接口;
- 浏览器对象模型(BOM),提供与浏览器交互的方法和接口。
<script>元素
<script>定义了6个属性:
- async:可选,表示应该立即下载脚本;
- charset:可选,表示通过src属性指定的代码的字符集;
- defer:可选,表示脚本可以延迟到文档完全被解析和显示之后再执行;
- language:可废弃;
- src:可选,表示包含要执行代码的外部文件;
- type:可选,可以看成是language的替代属性;表示编写代码使用的脚本语言的内容类型(也成为MIME类型)。
注:anync的脚本加载时并不能保证他们的先后执行顺序!
- 外部文件优点:
- 可维护性;
- 可缓存;
- 适应未来。
语法
- 标识符
所谓标识符,就是指变量、函数、属性的名字,或者函数的参数。
- 第一个字符必须是一个字母、下划线(_)或者一个美元符号($);
- 其他字符可以是字母、下划线、美元符号或数字。
ECMAScript标识符采用驼峰大小写格式。
- 严格模式
ECMAScript 5引入了严格模式的概念。严格模式是为JavaScript定义了一种不同的解析和执行模型。在严格模式下,ECMAScript3 中的一些不确定的行为将得到处理,而且对某些不安全的操作也会抛出错误。
use strict
- 关键字和保留字
关键字和保留字不能用作标识符。
数据类型
5种基本数据类型:Null、Undefined、Boolean、Number、String
1种复杂数据类型:Object
- 数值类型转换:Number()、parseInt()、parseFloat()
- 字符类型转换:toString()、String()
- 对象:Object()
typeof 操作符
检测给定变量的数据类型。
操作符
- 一元操作符
- 递增和递减操作符(++、–)
- 一元加和减操作符,正负(+、-)
- 位操作符
- 按位非
~,执行按或非的结果就是返回数值的反码 - 按位与
&,按位与操作就是将两个数值的每一位对齐(具体参考真值表) - 按位或
|,同样也有两个操作数,按位或操作遵循(真值表) - 按位异或
^,也有两个操作数,按位异或操作遵循(真值表) - 左移
<<,这个操作符会将数值的所有位向左移动指定的位数 - 有符号的右移
>>,这个操作符会将数值向右移动,但保留符号位(即正负号标记) - 无符号右移
>>>,这个操作符会将数值的所有32位都向右移动
- 布尔操作符
- 逻辑非
!,返回一个布尔值 - 逻辑与
&&,返回一个布尔值 - 逻辑或
||,返回一个布尔值
- 乘性操作符
- 乘法
* - 除法
/ - 求模(余数)
%
- 加性操作符
- 加法
+ - 减法
-
- 关系操作符
- 小于
< - 大于
> - 小于等于
<= - 大于等于
>=
- 相等操作符
- 相等
==和不相等!= - 全等
===和不全等!==
- 条件操作符
a > b ? a : b
- 赋值操作符
=
算术操作符:(乘/赋值*=)、(除/赋值/=)、(模/赋值%=)、(加/赋值+=)、(减/赋值-=)、(左移/赋值<<=)、(右移/赋值>>=)、(无符号右移/赋值>>>=)
- 逗号操作符
逗号操作多用于声明多个变量;但除此之外,逗号操作符还可以用于赋值。
语句
- if语句
1 | if(条件){ |
- do-while语句
1 | do{ |
- while语句
1 | while(条件){ |
- for语句
1 | for(var i;i<length;i++){ |
- for-in语句
1 | for(属性 in 对象){ |
- label语句可以在代码中添加标签
加标签的语句一般都要与for语句等循环语句配合使用
- break和continue语句
break立即退出循环,强制继续执行后面的语句
continue退出循环后从循环顶部继续执行
- with语句
with语句的作用是将代码的作用域设置到一个特定的对象中。
- switch语句
1 | switch(表达式){ |
函数
1 | function (参数){ |
函数对于任何语言来说都是一个核心的概念,通过函数可以封装任意多条语句,而且可以在任何地方,任何时候调用执行。ECMAScript函数不能像传统意义上那样实现重载。
执行环境
执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行为。
作用域链
当代码在一个环境中执行时,会创建变量对象的一个作用域链。作用域链的用途,是保证对执行环境有权访问的所有变量和函数的有序访问。
延长作用域链
执行环境的类型总共只有两种-全局和局部(函数),但还是有其他办法来延长作用域链。
- try-catch语句的catch块
- with语句
垃圾收集
JavaScript 具有自动垃圾收集机制,也就是说,执行环境会负责管理代码执行过程中使用的内存。
- 标记清除
- 引用计数
- 手工解除引用
变量 = null,解除变量的引用不仅有助于消除循环引用现象,而且对垃圾收集也有好处。为了确保有效地回收内存,应该及时解除不再使用的全局对象、全局对象属性以及循环引用变量的引用。
引用类型
- Object类型
- Array类型
- Date类型
- RegExp类型:支持正则表达式
- Function类型,每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法。
基本包装类型
- Boolean类型
- Number类型
- String类型
单体内置对象
- Global对象在某种意义上市座位一个终极的“兜底儿对象”来定义的。不属于任何其他对象的属性和方法,最终都是他的属性和方法。
- Math对象提供了辅助完成这些计算的属性和方法。


