日新网培训Javascript之四.Js语句、对象与数组

一、语句

1、复合语句 用逗号可以将几个表达式联合起来形成一个表达式,用花括号可以将几个语句联合起来形成语句块。复合语句支持break、continue、return、throw语句。

2、switch语句 和C很类似,每个标签后都要有break,如果没有匹配标签,则执行标签default的内容,如果没有default,则跳过执行。如果没有break语句,则会一直执行到终点。需要注意的是:匹配标签时使用的是===等同运算符,而不是==相等。所以必须保证类型一样,才有意义。

3、循环语句 do/while 至少执行一次 while 与C/C++一样  for 与C/C++一样  for/in 类似C#的foreach 但区别之处在于,for/in用来枚举对象的成员名,而不是成员值。例如for(var i in array) alert(i)只会得到0,1,2,3…… 而只有alert(array[i])才会得到数组的值。同理对象也是,普通的i只会得到对象的属性名。另外,for/in枚举的顺序无法控制,如果在for/in中删除一个还没枚举的属性,那么它就被删除了,不会再被枚举,如果在for/in中增加一个属性,那么它不一定会被枚举(根据不同的JS实现决定)。另外,并非所有的对象属性会被枚举,有些被标记只读、永久(不可删)、不可枚举的、内部属性方法无法被枚举出来。

4、标签和break与continue 标签一般在C语言中与goto连用,用来标记一个位置或一个语句块。在JS中,标签也有同样的作用,但它同时可以与break与continue连用。用break与标签连用后,会中断当前位置的执行,然后转到标签所在位置,但标签所在位置所包含的语句块不执行,而执行跳到下面。当然,毫无疑问,break一定要在标签所标记的语句块内部才有意义。对于continue只可以用在四种循环中,被执行时当前迭代被终止,而进行下一次迭代。对于continue对于四种循环的作用,记住一点,都要去检查下次循环的条件。对于for循环,会先计算增量表达式,然后再检查循环条件。

5、function与return function用于定义函数,函数只可以在JS顶层代码中或嵌套在其他函数定义中,不可以出现在if或循环等其他语句中。从本质来说function并非一个语句,因为语句是动态的,是解释执行的。而函数定义是静态的,在代码被开始执行前,JS就会将函数解析并作为属性存储(如果是顶层函数则存于全局变量,嵌套函数则存入所嵌套的对象中)。对于return,可以带表达式来返回函数执行结果,需要注意的是,如果使用了不带表达式的return语句或者没有用return,那么这个函数的结果就是undefined。

6、throw与try/catch/finally throw可以抛出异常,例如throw new Error('What Happen?')。try{}catch(ex){}finally{},try用来存放执行的命令,catch当捕获异常后执行,ex存的就是异常对象。finally中存放的代码总会被执行,一般用来清理操作。注意的是,无论try中是否抛出异常,finally中的语句块总会执行,即使使用了return、continue、break也一样。而finally中用了return、continue、break或者throw的话,那么当前执行的会被舍弃。如果finally块中抛出异常,那么该异常将代替抛出过程中的异常。根据这个特性,我们可以使用while和try/finally来实现for循环的功能,在finally中实现i++,这样无论在try块中使用任何continue、break,i都会++。

7、with语句 就内部来说,with暂时修改了作用域链,with(obj){},代码块中的成员及表达式的作用域会优先为obj。但就实际应用时,with一般用于减少代码的输入,如果用document.getElementById来获取一个对象并多次修改它的属性,则可以把它放到with里,如with(document.getElementById('xxx')){width="";height=""}。但这样写却不如var obj=document.getElementById('xxx');然后使用obj来引用属性执行起来效率快。所以人们反对使用with语句,建议使用变量来引用with中的东西,这样方便JS解释器优化。

8、总结一下JS中的语句:break case continue default do/while 空语句 for for/in function if/else label return switch throw try/catch/finally var while with(建议不使用)。

二、对象和数组

1、对象 对象和数组是两种基本数据类型,它们表示一个值的集合(Key-Value)。创建对象最简单的方法使用JSON直接量。var obj = {属性名:属性值,……};,另外,可以用new运算符加构造函数创建对象。Object()等同于{}直接量。

2、对象的属性 用“.”来获取对象属性或者用[]来获取。如果把一个值赋给一个对象中没有的属性,则会隐式创建它。属性的枚举可以使用for/in,属性存在性的检测可以使用in运算符,如if("X" in obj),因为查询一个并不存在的属性会返回undefined,所以也可以用!==undefined来查询是否存在。这里非常需要注意,因为查询一个未定义的变量是会出错的,而查询一个不存在的属性确实允许的,一定要区别属性、变量(Var)、全局变量(全局对象的属性)。但更需要主要的是,如果把一个属性赋值为undefined(一般没人会这样做),那么只能用in的方法了。删除属性用delete,删除之后用for/in和in都无法检测。属性的实质是JS对象把字符串(属性名)映射成值。

3、Object属性和方法 (1)constructor属性 引用对象的构造函数,可以判断对象类型。(2)toString()方法,返回对象的字符串表达 (3)toLocaleString() (4)valueOf() 将对象转换成某种基本类型时自动调用 (5)hasOwnProperty() 测试非继承属性 (6)propertyIsEnumerable() 如果可以被for/in的话返回true,否则返回false。一般所有字定义属性都可以枚举,而继承属性不可以枚举。(7)isPrototypeOf() 如果调用此方法的对象是参数的原型对象,返回True,否则返回False。

4、数组。用typeof运算符处理数组,返回object。数组储存采用引用方法,可以嵌套实现多维数组。构造函数有三种使用方法(1)默认为空数组,与[]相等。(2)参数指定前N个数的值。(3)参数指定长度。每个值默认为undefined。

5、数组的访问与操作 数组可以通过下标进行访问,如果数组下标不存在,则会隐式创建,如果下标不是一个数字或者为负数,则JS会转换为一个字符串,并添加以此字符串为名的属性。JS中数组内存分配是动态的,而不是一开始固定分配。删除数组的话,使用delete只会把一个数组元素设置为undefined,而数组元素本身才继续存在,真正删除一个数组的话,会使后面的元素向前走一个位置。如a[0,1,2,3]中,如果删掉0,那么1,2,3都会向前走一个位置。数组提供了删除的方法:Array.shift()删除得一个元素 Array.pop()删除最后一个元素 Array.splice()删除一个范围的元素。

6、数组的长度 数组的长度为length,值为数组下标中最大的下标+1。同时数组长度必须小于2^32 - 1。在遍历数组时,我们经常使用length属性,因为数组可能不是连续的,所以在遍历中最好先用if判断一下每个位置的值是否存在,

posted on 2010-04-21 19:09  寻雨  阅读(203)  评论(0编辑  收藏  举报

导航