截取自读书频道
http://book.youkuaiyun.com/bookfiles/110/index.htm
2。1语法ECMAScript的基础概念如下:
1 区分大小写 。2 变量是弱类型的 。
3 每行结尾的分号可有可无 。
4 注释与Java 、C 和PHP 语言的注释相同 。
5 括号表明代码块 。
2。2变量
ECMAScript 中的变量是用 var 运算符( variable 的缩写)加变量名定义的
var test = "43";
可以用一个 var 语句定义两个或多个变量, 用同一个 var 语句定义的变量不必具有相同的类型.

ECMAScript 中的变量并不一定要初始化
可以把变量初始化为字符串类型的值,之后把它设置为数字值
变量命名法则:
1 第一个字符必须是字母、下划线(_)或美圆符号($)。
2 余下的字符可以是下划线、美圆符号或任何字母或数字字符。
在使用变量之前不必声明
2。3关键字
else / finally / for / function / if / in / instanceof
new / return / switch / this / throw / try / typeof
var / void / while / with
如果把关键字用作变量名或函数名,可能得到诸如“Identifier expected”(应该有标识符)这样的错误消息。
abstract / boolean / byte / char / class / const / debugger /
double / enum / export / extends / final / float / goto /
implements / import / int / interface / long / native / package /
private / protected / public / short / static / super / synchronized /
throws / transient / volatile (把java的保留字都包括了。除了null,true,false)
如果将保留字用作变量名或函数名,那么除非将来的浏览器实现了该保留字,否则很可能收不到任何错误消息。当浏览器将其实现后,该单词将被看作关键字,如此将出现关键字错误。
2。5原始值和引用值
在ECMAScript中,变量可以存放两种类型的值,即原始值和引用值。
1 原始值(primitive value)是存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。
2 引用值(reference value)是存储在堆(heap)中的对象,也就是说,存储在变量处的值是一个指针(point),指向存储对象的内存处。
为变量赋值时,ECMAScript的解释程序必须判断该值是原始类型的,还是引用类型的。原始类型有5种:Undefined、Null、Boolean、Number和String
2。6原始值
2.6.1 typeof 运算符
typeof 运算符有一个参数,即要检查的变量或值。
对变量或值调用typeof运算符将返回下列值之一:
1 "undefined",如果变量是Undefined型的。
2 "boolean",如果变量是Boolean型的。
3 "number",如果变量是Number型的。
4 "string",如果变量是String型的。
5 "object",如果变量是一种引用类型或Null类型的。
2.6.2 Undefined类型
Undefined类型只有一个值,即undefined。当声明的变量未初始化时,该变量的默认值是undefined。
当函数无明确返回值时,返回的也是值undefined
2.6.3 Null类型
Null类型只有一个专用值null。undefined实际上是从值null派生来的,因此ECMAScript把它们定义为相等 的。
区别:undefined是声明了变量但未对其初始化时赋予该变量的值,null则用于表示尚未存在的对象。
2.6.4 Boolean类型
Boolean类型有两个值true和false(即两个Boolean字面量)
2.6.5 Number类型
Number类型既可以表示32位的整数,还可以表示64位的浮点数。直接输入的(而不是从另一个变量访问的)任何数字都被看作Number型的字面量。八进制字面量的首数字是0,十六进制的字面量首位数字必须为0x。
所有整数都可表示为八进制或十六进制的字面量,但所有数学运算返回的都是十进制结果
Number类型特殊值:Number.MAX_VALUE,Number.MIN_ VALUE,Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY,NaN
相关函数:isFinit()判断是否无穷大;isNaN()判断是否非数。
2.6.6 String类型
它是唯一没有固定大小的原始类型。字符串字面量是由双引号(")或单引号(')声明的
2。7转换
2.7.1 转换成字符串
原始值Boolean值、数字和字符串都有toString()方法,可以把它们的值转换成字符串。Number类型的toString()方法有两种模式,即默认模式和基模式。
2.7.2 转换成数字
parseInt()和parseFloat()。只有对String类型调用这些方法,它们才能正确运行;对其他类型返回的都是NaN。parseInt()方法还有基模式,parseFloat()没有基模式。
2.7.3 强制类型转换
ECMAScript中可用的3种强制类型转换如下:
1 Boolean(value)——把给定的值转换成Boolean型;至少有一个字符的字符串、非0数字或对象,将转换为true.空字符串、数字0、undefined或null,它将返回false
2 Number(value)——把给定的值转换成数字(可以是整数或浮点数);
3 String(value)——把给定的值转换成字符串。
2。8引用类型
遇到引用值时,所处理的就是对象。对象是由new运算符加上要实例化的类的名字创建的,和java类似。
2.8.1 Object类
Java中的java.lang.object相似,ECMAScript中的所有类都由这个类继承而来。
1 ToString()——返回对象的原始字符串表示。
2 ValueOf()——返回最适合该对象的原始值。对于许多类,该方法返回的值都与toString()的返回值相同。
2.8.2 Boolean类
Boolean类是Boolean原始类型的引用类型。要创建Boolean对象,只需要传递Boolean值作为参数:
var oBoolean Object = new Boolean(true);(很少使用Boolean对象,都是直接使用原始类型)
2.8.3 Number类
toFixed()、toExponential()和toPrecision()方法都会进行舍入操作,以便用正确的小数位数正确地表示一个数。
2.8.4 String类
String类是String原始类型的对象表示法
String类具有属性length,它是字符串中的字符个数(很多方法和属性都有java一样)
2.8.5 instanceof运算符
同java
2。9
2.9.1 一元运算符
1. delete
delete 运算符删除对以前定义的对象属性或方法的引用2. void
void 运算符对任何值都返回 undefined 。3. 增量/减量运算符
++/--
4. 一元加法和一元减法
正+负-
2.9.2 位运算符
1. 位运算NOT(~)
2 位运算AND(&)
3. 位运算OR(|)
4. 位运算XOR(^)
6. 左移运算(<<)
7. 有符号右移运算(>>)
2.9.3 Boolean运算符
1. 逻辑NOT(!)
1 如果运算数是对象,返回false。
2 如果运算数是数字0,返回true。
3 如果运算数是0以外的任何数字,返回false。
4 如果运算数是null,返回true。
5 如果运算数是NaN,返回true。
6 如果运算数是undefined,发生错误。
2. 逻辑AND运算符(&&)
1 如果一个运算数是对象,另一个是Boolean值,返回该对象。
2 如果两个运算数都是对象,返回第二个对象。
3 如果某个运算数是null,返回null。
4 如果某个运算数是NaN,返回NaN。
5 如果某个运算数是undefined,发生错误。
3. 逻辑OR运算符(||)
1 如果一个运算数是对象,另一个是Boolean值,返回该对象。
2 如果两个运算数都是对象,返回第一个对象。
3 如果某个运算数是null,返回null。
4 如果某个运算数是NaN,返回NaN。
5 如果某个运算数是undefined,发生错误。
2.9.4 乘性运算符
1. 乘法运算符(*)
1 如果运算数都是数字,执行常规的乘法运算,即两个正数或两个负数相乘结果为正数,两个运算数符号不同,结果为负数。如果结果太大或太小,那么生成的结果就是Infinity或-Infinity。
2 如果某个运算数是NaN,结果为NaN。
3 Infinity乘以0,结果为NaN。
4 Infinity乘以0以外的任何数字,结果为Infinity或-Infinity,由第二个运算数的符号决定。
5 Infinity乘以Infinity,结果为Infinity。
2. 除法运算符(/)
1 如果运算数都是数字,执行常规的除法运算,即两个正数或两个负数结果为正数,两个运算数符号不同,结果为负数。如果结果太大或太小,那么生成的结果就是Infinity或-Infinity。
2 如果某个运算数是NaN,结果为NaN。
3 Infinity被Infinity除,结果为NaN。
4 Infinity被任何数字除,结果为Infinity。
5 0除一个非无穷大的数字,结果为NaN。
6 Infinity被0以外的任何数字除,结果为Infinity或-Infinity,由第二个运算数的符号决定。
3. 取模运算符(%)
1 如果运算数都是数字,执行常规的算术除法运算,返回除法运算得到的余数。
2 如果被除数是Infinity,或者除数是0,结果为NaN。
3 Infinity被Infinity除,结果为NaN。
4 如果除数是无穷大的数,结果为被除数。
5 如果被除数为0,结果为0。
2.9.5 加性运算符
1. 加法运算符
如果两个运算数都是数字,将执行算术加法,根据加法规则返回结果。
1 某个运算数是NaN,结果为NaN。
2 Infinity加Infinity,结果为Infinity。
3 -Infinity加-Infinity,结果为-Infinity。
4 Infinity加-Infinity,结果为NaN。
5 +0加+0,结果为+0。
6 -0加+0,结果为+0。
7 -0加-0,结果为-0。
如果某个运算数是字符串,那么采用下列规则:
1 如果两个运算数都是字符串,把第二个字符串连接到第一个字符串上。
2 如果只有一个运算数是字符串,把另一个运算数转换成字符串,结果是两个字符串连接成的字符串。
2. 减法运算符
1 如果两个运算数都是数字,将执行算术减法,返回结果。
2 某个运算数是NaN,结果为NaN。
3 Infinity减Infinity,结果为NaN。
4 -Infinity减-Infinity,结果为NaN。
5 Infinity减-Infinity,结果为Infinity。
6 -Infinity减Infinity,结果为-Infinity。
7 +0减+0,结果为+0。
8 -0减-0,结果为-0。
9 -0减-0,结果为+0。
10 某个运算数不是数字,结果为NaN。
2.9.6 关系运算符
2.9.7 等性运算符
等号和非等号用于处理原始值,全等号和非全等号用于处理对象。
1. 等号和非等号
双等号(= =);非等号(!=)
确定两个运算数是否相等,这两个运算符都会进行类型转换。
执行类型转换的基本规则如下:
1 如果一个运算数是Boolean值,在检查相等性之前,把它转换成数字值。false转换成0,true转换成1。
2 如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字。
3 如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串(调用toString()方法)。
4 如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字。
(原始类型向数字靠拢,对象向字符串靠拢)
在进行比较时,该运算符还遵守下列规则:
1 值null和undefined相等。
2 在检查相等性时,不能把null和undefined转换成其他值。
3 如果某个运算数是NaN,等号将返回false,非等号将返回true。
4 如果两个运算数都是对象,那么比较的是它们的引用值。如果两个运算数指向同一个对象,那么等号返回 true ,否则两个运算数不等2. 全等号和非全等号
全等号由三个等号(= = =)表示,只有在无需类型转换运算数就相等的情况下,才返回true。
非全等号由感叹号加两个等号( != = )表示,只有在无需类型转换运算数不相等的情况下,才返回 true 。2.9.8 条件运算符
2.9.9 赋值运算符
2.9.10 逗号运算符
2。10
2.10.1 if语句
2.10.2 迭代语句
1. do-while语句
2. while语句
3. for语句
4. for-in语句
for-in语句是严格的迭代语句,用于枚举对象的属性。语法如下:
2.10.3 有标签的语句
可以用下列语法给语句加标签,以便以后调用(不知道有没有java中标签位置的限制):
2.10.4 break语句和continue语句
2.10.5 with语句
with语句用于设置代码在特定对象中的作用域。它的语法如下:
例如:
2.10.6 switch语句
2。11函数
函数是由关键字function、函数名加一组参数以及置于括号中的要执行的代码声明的。
不必声明返回值。函数在执行过return语句后停止执行代码。
2.11.1 无重载
不支持重载。可以有重名的函数,调用最后一个。
2.11.2 arguments对象
使用特殊对象arguments,开发者无需明确指出参数名,就能访问它们。
还可用arguments对象检测传递给函数的参数个数,引用属性arguments.length即可。
ECMAScript不会验证传递给函数的参数个数是否等于函数定义的参数个数。开发者定义的函数都可以接受任意个数的参数(根据Netscape的文档,最多能接受25个),而不会引发任何错误。
用arguments对象判断传递给函数的参数个数,即可模拟函数重载
2.11.3 Function类
函数实际上是功能完整的对象。Function类可以表示开发者定义的任何函数。用Function类直接创建函数的语法如下:
因为函数是引用类型,所以它们也有属性和方法。ECMAScript定义的属性length声明了函数期望的参数个数。
unction对象也有与所有对象共享的标准valueOf()方法和toString()方法。这两个方法返回的都是函数的源代码,在调试时尤其有用。
2.11.4 闭包
所谓闭包,是指词法表示包括不必计算的变量的函数,也就是说,该函数能使用函数外定义的变量。