3.1 语法
-
区分大小写
ECMAScript 中的一切(变量、函数名和操作符)都区分大小写 -
标识符
- 所谓标识符,就是指变量、函数、属性的名字,或者函数的参数。标识符可以是按照下列格式规则组合起来的一或多个字符:
- 第一个字符必须是一个字母、下划线( _ )或一个美元符号( $ );
- 其他字符可以是字母、下划线、美元符号或数字。
- 所谓标识符,就是指变量、函数、属性的名字,或者函数的参数。标识符可以是按照下列格式规则组合起来的一或多个字符:
-
注释
- // 单行注释
- /**/ 块级注释
-
严格模式
"use strict"; -
语句
var sum = a + b // 即使没有分号也是有效的语句——不推荐
var diff = a - b; // 有效的语句——推荐
3.2 关键字和保留字
- 关键字
- 保留字
3.3 变量
- ECMAScript 的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据。换句话说, 每个变量仅仅是一个用于保存值的占位符而已。定义变量时要使用 var 操作符(注意 var 是一个关键 字),后跟变量名(即一个标识符),如下所示:
var message;//局部变量
message = "hi"; //全局变量
3.4 数据类型
ECMAScript 中有 5 种简单数据类型(也称为基本数据类型): Undefined 、 Null 、 Boolean 、 Number 和 String 。还有 1种复杂数据类型—— Object , Object 本质上是由一组无序的名值对组成的。
-
3.4.1 typeof 操作符
- "undefined" ——如果这个值未定义;
- "boolean" ——如果这个值是布尔值;
- "string" ——如果这个值是字符串;
- "number" ——如果这个值是数值;
- "object" ——如果这个值是对象或 null ;
- "function" ——如果这个值是函数。
var message = "some string"; alert(typeof message); // "string" alert(typeof(message)); // "string" alert(typeof 95); // "number" // typeof (null) 会返回"object" -
3.4.2 Undefined 类型
Undefined 类型只有一个值,即特殊的 undefined 。在使用 var 声明变量但未对其加以初始化时, 这个变量的值就是 undefined ,例如:
var message; alert(message == undefined); //true -
3.4.3 Null 类
Null 类型是第二个只有一个值的数据类型,这个特殊的值是 null 。从逻辑角度来看, null 值表 示一个空对象指针,而这也正是使用 typeof 操作符检测 null 值时会返回 "object" 的原因,如下面 的例子所示:
var car = null;
alert(typeof car); // "object"
- 3.4.4 Boolean 类型
Boolean 类型是 ECMAScript 中使用得最多的一种类型,该类型只有两个字面值: true 和 false 。 这两个值与数字值不是一回事,因此 true 不一定等于 1,而 false 也不一定等于 0。以下是为变量赋 Boolean 类型值的例子:
var found = true;
var lost = false;
-
3.4.5 Number 类型
Number 类型应该是 ECMAScript 中最令人关注的数据类型了,这种类型使用 IEEE754 格式来表示 整数和浮点数值(浮点数值在某些语言中也被称为双精度数值)。为支持各种数值类型,ECMA-262 定 义了不同的数值字面量格式。
var octalNum1 = 070; // 八进制的 56 var intNum = 55; // 十进制的55 var hexNum1 = 0xA; // 十六进制的 10-
- 浮点数值:数值中必须包含一个小数点,并且小数点后面必须至少有一位数字
-
- 数值范围:5e-324
-
- NaN
即非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数 未返回数值的情况(这样就不会抛出错误了)。
NaN 本身有两个非同寻常的特点。首先,任何涉及 NaN 的操作(例如 NaN /10)都会返回 NaN ,这 个特点在多步计算中有可能导致问题。其次, NaN 与任何值都不相等,包括 NaN 本身。-
- 数值转换
-
有 3 个函数可以把非数值转换为数值: Number() 、 parseInt() 和 parseFloat() ;
-
3.4.6 String 类型
String 类型用于表示由零或多个 16 位 Unicode 字符组成的字符序列,即字符串。字符串可以由双 引号(")或单引号(')表示,因此下面两种字符串的写法都是有效的:
var firstName = "Nicholas"; var lastName = 'Zakas';-
- 字符字面量
-
- 字符串的特点
ECMAScript 中的字符串是不可变的,也就是说,字符串一旦创建,它们的值就不能改变。要改变 某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量。
-
- 转换为字符串 : toString()
var age = 11; var ageAsString = age.toString(); // 字符串"11" -
-
3.4.7 Object 类型
ECMAScript 中的对象其实就是一组数据和功能的集合。对象可以通过执行 new 操作符后跟要创建 的对象类型的名称来创建。
var o = new Object();
3.5 操作符
ECMA-262 描述了一组用于操作数据值的操作符,包括算术操作符(如加号和减号)、位操作符、
关系操作符和相等操作符。
-
3.5.1 一元操作符
只能操作一个值的操作符叫做一元操作符。
-
- 递增和递减操作符
//前置型-递增 var age = 29; ++age; //后置型-递增 var age = 29; age++; //前置型-递减 var age = 29; --age; //后置型-递减 var age = 29; age--;递增和递减操作符遵循下列规则:
-
- 一元加和减操作符
一元加/减操作符以一个加号(+)/(-)表示,放在数值前面,对数值不会产生任何影响。
var s1 = "01"; var s2 = "1.1"; var s3 = "z"; var b = false; var f = 1.1; var o = { valueOf: function() { return -1; } }; s1 = +s1; // 值变成数值 1 s2 = +s2; // 值变成数值 1.1 s3 = +s3; // 值变成 NaN b = +b; // 值变成数值 0 f = +f; // 值未变,仍然是 1.1 o = +o; // 值变成数值-1 -
-
3.5.2 位操作符
位操作符用于在最基本的层次上,即按内存中表示数值的位来操作数值。
-
- 按位非(NOT)
按位非操作符由一个波浪线(~)表示,执行按位非的结果就是返回数值的反码。按位非是 ECMAScript 操作符中少数几个与二进制计算有关的操作符之一。
var num1 = 25; // 二进制 00000000000000000000000000011001 var num2 = ~num1; // -num1 - 1; alert(num2); // -26 -
- 按位与(AND)
按位与操作符由一个和号字符( & )表示,它有两个操作符数。从本质上讲,按位与操作就是将两 个数值的每一位对齐,然后根据下表中的规则,对相同位置上的两个数执行 AND 操作:
var result = 25 & 3; alert(result); //1 -
- 按位或(OR)
按位或操作符由一个竖线符号(|)表示,同样也有两个操作数。按位或操作遵循下面这个真值表。
var result = 25 | 3; alert(result); //27 -
- 按位异或(XOR)
按位异或操作符由一个插入符号(^)表示,也有两个操作数。以下是按位异或的真值表。
var result = 25 ^ 3; alert(result); //26 -
- 左移
左移操作符由两个小于号(<<)表示,这个操作符会将数值的所有位向左移动指定的位数。
var oldValue = 2; // 等于二进制的 10 var newValue = oldValue << 5; // 等于二进制的 1000000,十进制的 64 -
- 有符号的右移
有符号的右移操作符由两个大于号(>>)表示,这个操作符会将数值向右移动,但保留符号位(即 正负号标记)。
var oldValue = 64; // 等于二进制的 1000000 var newValue = oldValue >> 5; // 等于二进制的 10 ,即十进制的 2 -
- 无符号右移
无符号右移操作符由 3 个大于号(>>>)表示,这个操作符会将数值的所有32位都向右移动。对正 数来说,无符号右移的结果与有符号右移相同。
var oldValue = 64; // 等于二进制的 1000000 var newValue = oldValue >>> 5; // 等于二进制的 10 ,即十进制的 2
-
-
3.5.3 布尔操作符
-
- 逻辑非
逻辑非操作符由一个叹号(!)表示,可以应用于 ECMAScript 中的任何值。
逻辑非操作符遵循下列规则:
-
- 逻辑与
逻辑与操作符由两个和号( && )表示
逻辑与操作符遵循下列规则:
-
- 逻辑或
逻辑或操作符由两个竖线符号( || )表示
逻辑与操作符遵循下列规则:
-
-
3.5.4 乘性操作符
ECMAScript 定义了 3 个乘性操作符:乘法、除法和求模。
-
- 乘法
-
- 除法
-
- 求模
-
-
3.5.5 加性操作符
- 1.加法
- 2.减法
- 1.加法
-
3.5.6 关系操作符
小于(<)、大于(>)、小于等于(<=)和大于等于(>=)
-
3.5.7 相等操作符
-
- 相等和不相等
相等和不相等——先转换再比较, 全等和不全等——仅比较而不转换。
-
-
3.5.8 条件操作符
//格式:
variable = boolean_expression ? true_value : false_value;
- 3.5.9 赋值操作符
-
3.5.10 逗号操作符
使用逗号操作符可以在一条语句中执行多个操作,如下面的例子所示:
var num1=1, num2=2, num3=3;
3.6 语句
- 3.6.1 if 语句
- 3.6.2 do-while 语句
- 3.6.3 while 语句
- 3.6.4 for 语句
- 3.6.5 for-in 语句
- 3.6.6 label 语句
- 3.6.7 break 和 continue 语句
- 3.6.8 with 语句
- 3.6.9 switch 语句
3.7 函数
函数对任何语言来说都是一个核心的概念。通过函数可以封装任意多条语句,而且可以在任何地方、
任何时候调用执行。ECMAScript 中的函数使用 function 关键字来声明,后跟一组参数以及函数体。
函数的基本语法如下所示:
```
function functionName(arg0, arg1,...,argN) {
statements
}
// 函数体内可以通过 arguments 对象来访问这个参数数组,从而获取传递给函数的每一个参数。
// ECMAScript 函数不能像传统意义上那样实现重载。
```
3.8 小结
JavaScript 的核心语言特性在 ECMA-262 中是以名为 ECMAScript 的伪语言的形式来定义的。 ECMAScript 中包含了所有基本的语法、操作符、数据类型以及完成基本的计算任务所必需的对象,但 没有对取得输入和产生输出的机制作出规定。理解 ECMAScript 及其纷繁复杂的各种细节,是理解其在 Web 浏览器中的实现——JavaScript 的关键。目前大多数实现所遵循的都是 ECMA-262 第 3 版,但很多 也已经着手开始实现第 5 版了。以下简要总结了 ECMAScript 中基本的要素。
ECMAScript 中的基本数据类型包括 Undefined 、 Null 、 Boolean 、 Number 和 String 。
与其他语言不同,ECMScript 没有为整数和浮点数值分别定义不同的数据类型, Number 类型可 用于表示所有数值。
ECMAScript 中也有一种复杂的数据类型,即 Object 类型,该类型是这门语言中所有对象的基 础类型。
严格模式为这门语言中容易出错的地方施加了限制。
ECMAScript 提供了很多与 C 及其他类 C 语言中相同的基本操作符,包括算术操作符、布尔操作 符、关系操作符、相等操作符及赋值操作符等。
ECMAScript 从其他语言中借鉴了很多流控制语句,例如 if 语句、 for 语句和 switch 语句等。 ECMAScript 中的函数与其他语言中的函数有诸多不同之处。
无须指定函数的返回值,因为任何 ECMAScript 函数都可以在任何时候返回任何值。
实际上,未指定返回值的函数返回的是一个特殊的 undefined 值。
ECMAScript 中也没有函数签名的概念,因为其函数参数是以一个包含零或多个值的数组的形式 传递的。
可以向 ECMAScript 函数传递任意数量的参数,并且可以通过 arguments 对象来访问这些参数。
由于不存在函数签名的特性,ECMAScript 函数不能重载。