《 JavaScript高级程序设计》第二章ECMAScript基础

来源:互联网 发布:网站cms 编辑:程序博客网 时间:2024/04/30 14:08

截取自读书频道

http://book.csdn.net/bookfiles/110/index.htm

2。1语法

ECMAScript的基础概念如下:

1  区分大小写
2 变量是弱类型的
3
每行结尾的分号可有可无
4
注释与JavaCPHP语言的注释相同
5
括号表明代码块


2。2变量


ECMAScript中的变量是用var运算符(variable的缩写)加变量名定义的
var test = "43";

可以用一个var语句定义两个或多个变量,用同一个var语句定义的变量不必具有相同的类型.

ECMAScript中的变量并不一定要初始化

可以把变量初始化为字符串类型的值,之后把它设置为数字值

变量命名法则:

    1  第一个字符必须是字母、下划线(_)或美圆符号($)。

    2  余下的字符可以是下划线、美圆符号或任何字母或数字字符。

在使用变量之前不必声明

2。3关键字


break / case / continue / default / delete / do
else / finally / for / function / if / in / instanceof
new / return / switch / this /  throw / try / typeof
var / void / while / with

如果把关键字用作变量名或函数名,可能得到诸如“Identifier expected”(应该有标识符)这样的错误消息。


2。4保留字


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种:UndefinedNullBooleanNumberString


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类型有两个值truefalse(即两个Boolean字面量)

2.6.5  Number类型

  Number类型既可以表示32位的整数,还可以表示64位的浮点数。直接输入的(而不是从另一个变量访问的)任何数字都被看作Number型的字面量。八进制字面量的首数字是0,十六进制的字面量首位数字必须为0x。

  所有整数都可表示为八进制或十六进制的字面量但所有数学运算返回的都是十进制结果

    Number类型特殊值:Number.MAX_VALUE,Number.MIN_ VALUE,Number.POSITIVE_INFINITY  Number.NEGATIVE_INFINITYNaN

    相关函数:isFinit()判断是否无穷大;isNaN()判断是否非数。

2.6.6  String类型

 它是唯一没有固定大小的原始类型。字符串字面量是由双引号(")或单引号(')声明的


2。7转换


2.7.1  转换成字符串
 
原始值Boolean值、数字和字符串都有toString()方法,可以把它们的值转换成字符串。Number类型的toString()方法有两种模式,即默认模式和基模式。

2.7.2  转换成数字

  parseInt()parseFloat()。只有对String类型调用这些方法,它们才能正确运行;对其他类型返回的都是NaNparseInt()方法还有基模式parseFloat()没有基模式。

2.7.3  强制类型转换

  ECMAScript中可用的3种强制类型转换如下:

    1  Boolean(value)——把给定的值转换成Boolean型;至少有一个字符的字符串、非0数字或对象,将转换为true.空字符串、数字0undefinednull,它将返回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  InfinityInfinity除,结果为NaN

4  Infinity被任何数字除,结果为Infinity

5  0除一个非无穷大的数字,结果为NaN

6  Infinity0以外的任何数字除,结果为Infinity-Infinity,由第二个运算数的符号决定。

    3. 取模运算符%

1  如果运算数都是数字,执行常规的算术除法运算,返回除法运算得到的余数。

如果被除数是Infinity,或者除数是0,结果为NaN

3  InfinityInfinity除,结果为NaN

4  如果除数是无穷大的数,结果为被除数。

5  如果被除数为0,结果为0

2.9.5  加性运算符

    1. 加法运算符

如果两个运算数都是数字,将执行算术加法,根据加法规则返回结果。

1  某个运算数是NaN,结果为NaN

2  InfinityInfinity,结果为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  InfinityInfinity,结果为NaN

4  -Infinity-Infinity,结果为NaN

5  Infinity-Infinity,结果为Infinity

6  -InfinityInfinity,结果为-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转换成0true转换成1

2  如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字。

3  如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串(调用toString()方法)。

4 如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字。

(原始类型向数字靠拢,对象向字符串靠拢)

在进行比较时,该运算符还遵守下列规则:

1  nullundefined相等。

2  在检查相等性时,不能把nullundefined转换成其他值。

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  闭包

所谓闭包,是指词法表示包括不必计算的变量的函数,也就是说,该函数能使用函数外定义的变量。