JavaScript语法

ECMAScript

ECMA-262定义的ECMAScript与Web浏览器没有依赖关系。实际上,这门语言本身并不包含输入和输出定义。ECMA-262定义的只是这门语言的基础,而在此基础智商可以构建更完善的脚本语言。

ECMA-262规定了这门语言的组成部分:

  • 语法
  • 类型
  • 语句
  • 关键字
  • 保留字
  • 操作符
  • 对象

ECMAScript 就是对实现该标准规定的各个方面内容的语言的描述。

文档对象模型(DOM)

Document Object Model,是针对XML但经过扩展用于HTML的应用程序编程接口(API,Application Programming Interface)。

DOM级别

  1. DOM1由两个模块组成:DOM核心(DOM Core)和 DOM HTML
  2. DOM2引入:
  • DOM视图:定义了跟踪不同文档
  • DOM事件:定义了事件和事件处理的接口
  • DOM样式:定义了基于CSS为元素应用样式的接口
  • DOM遍历和范围:定义了遍历和操作文档树的接口
  1. DOM3引入:
  • 以统一方式加载和保存文档的方法:在DOM加载和保存模块中定义;
  • 新增了验证文档的方法:在DOM验证模块中定义。

浏览器对象模型(BOM)

支持可以访问和操作浏览器窗口的浏览器对象模型(BOM,Browser Object MOdel)

JavaScript

JavaScript是一种专为与网页交互而设计的脚本语言,由下列三个不同的部分组成:

  • ECMAScript,由 ECMA-262定义,提供核心语言功能;
  • 文档对象模型(DOM),提供访问和操作网页内容的方法和接口;
  • 浏览器对象模型(BOM),提供与浏览器交互的方法和接口。

<script>元素

  • <script>定义了6个属性:
  1. async:可选,表示应该立即下载脚本;
  2. charset:可选,表示通过src属性指定的代码的字符集;
  3. defer:可选,表示脚本可以延迟到文档完全被解析和显示之后再执行;
  4. language:可废弃;
  5. src:可选,表示包含要执行代码的外部文件;
  6. type:可选,可以看成是language的替代属性;表示编写代码使用的脚本语言的内容类型(也成为MIME类型)。

注:anync的脚本加载时并不能保证他们的先后执行顺序!

  • 外部文件优点:
  1. 可维护性;
  2. 可缓存;
  3. 适应未来。

语法

  • 标识符

所谓标识符,就是指变量、函数、属性的名字,或者函数的参数。

  1. 第一个字符必须是一个字母、下划线(_)或者一个美元符号($);
  2. 其他字符可以是字母、下划线、美元符号或数字。

ECMAScript标识符采用驼峰大小写格式。

  • 严格模式

ECMAScript 5引入了严格模式的概念。严格模式是为JavaScript定义了一种不同的解析和执行模型。在严格模式下,ECMAScript3 中的一些不确定的行为将得到处理,而且对某些不安全的操作也会抛出错误。

use strict

  • 关键字和保留字

关键字和保留字不能用作标识符。

数据类型

5种基本数据类型:Null、Undefined、Boolean、Number、String
1种复杂数据类型:Object

  1. 数值类型转换:Number()、parseInt()、parseFloat()
  2. 字符类型转换:toString()、String()
  3. 对象:Object()

typeof 操作符

检测给定变量的数据类型。

操作符

  • 一元操作符
  1. 递增和递减操作符(++、–)
  2. 一元加和减操作符,正负(+、-)
  • 位操作符
  1. 按位非~,执行按或非的结果就是返回数值的反码
  2. 按位与&,按位与操作就是将两个数值的每一位对齐(具体参考真值表)
  3. 按位或|,同样也有两个操作数,按位或操作遵循(真值表)
  4. 按位异或^,也有两个操作数,按位异或操作遵循(真值表)
  5. 左移<<,这个操作符会将数值的所有位向左移动指定的位数
  6. 有符号的右移>>,这个操作符会将数值向右移动,但保留符号位(即正负号标记)
  7. 无符号右移>>>,这个操作符会将数值的所有32位都向右移动
  • 布尔操作符
  1. 逻辑非!,返回一个布尔值
  2. 逻辑与&&,返回一个布尔值
  3. 逻辑或||,返回一个布尔值
  • 乘性操作符
  1. 乘法*
  2. 除法/
  3. 求模(余数)%
  • 加性操作符
  1. 加法+
  2. 减法-
  • 关系操作符
  1. 小于<
  2. 大于>
  3. 小于等于<=
  4. 大于等于>=
  • 相等操作符
  1. 相等==和不相等!=
  2. 全等===和不全等!==
  • 条件操作符

a > b ? a : b

  • 赋值操作符

=

算术操作符:(乘/赋值*=)、(除/赋值/=)、(模/赋值%=)、(加/赋值+=)、(减/赋值-=)、(左移/赋值<<=)、(右移/赋值>>=)、(无符号右移/赋值>>>=

  • 逗号操作符

逗号操作多用于声明多个变量;但除此之外,逗号操作符还可以用于赋值。

语句

  1. if语句
1
2
3
4
5
6
7
if(条件){

}else if(条件){

}else{

}
  1. do-while语句
1
2
3
do{

}while(条件)
  1. while语句
1
2
3
while(条件){

}
  1. for语句
1
2
3
for(var i;i<length;i++){

}
  1. for-in语句
1
2
3
for(属性 in  对象){

}
  1. label语句可以在代码中添加标签

加标签的语句一般都要与for语句等循环语句配合使用

  1. break和continue语句

break立即退出循环,强制继续执行后面的语句

continue退出循环后从循环顶部继续执行

  1. with语句

with语句的作用是将代码的作用域设置到一个特定的对象中。

  1. switch语句
1
2
3
4
5
6
7
8
9
10
switch(表达式){
case 值:
声明
break;
case 值:
声明
break;
default:
声明
}

函数

1
2
3
function (参数){

}

函数对于任何语言来说都是一个核心的概念,通过函数可以封装任意多条语句,而且可以在任何地方,任何时候调用执行。ECMAScript函数不能像传统意义上那样实现重载。

执行环境

执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行为。

作用域链

当代码在一个环境中执行时,会创建变量对象的一个作用域链。作用域链的用途,是保证对执行环境有权访问的所有变量和函数的有序访问。

延长作用域链

执行环境的类型总共只有两种-全局和局部(函数),但还是有其他办法来延长作用域链。

  1. try-catch语句的catch块
  2. with语句

垃圾收集

JavaScript 具有自动垃圾收集机制,也就是说,执行环境会负责管理代码执行过程中使用的内存。

  1. 标记清除
  2. 引用计数
  3. 手工解除引用 变量 = null,解除变量的引用不仅有助于消除循环引用现象,而且对垃圾收集也有好处。为了确保有效地回收内存,应该及时解除不再使用的全局对象、全局对象属性以及循环引用变量的引用。

引用类型

  1. Object类型
  2. Array类型
  3. Date类型
  4. RegExp类型:支持正则表达式
  5. Function类型,每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法。

基本包装类型

  1. Boolean类型
  2. Number类型
  3. String类型

单体内置对象

  1. Global对象在某种意义上市座位一个终极的“兜底儿对象”来定义的。不属于任何其他对象的属性和方法,最终都是他的属性和方法。
  2. Math对象提供了辅助完成这些计算的属性和方法。