JS技术

JS学习(二)

字号+ 作者:H5之家 来源:H5之家 2015-09-09 12:16 我要评论( )

JS学习(二)_黄忠林_新浪博客,黄忠林,

JS学习(二) (2010-03-18 22:06:14)

标签: js it 分类: 程序语言

(引自:xiaofu)

(五).语句

5.1switch语句

ECMAScript v3标准允许case 语句扣跟随任意的表达式。例如:

Case 60*60:

Case Math.pi;

Case n+1;

注意:由于匹配的case表达式是用===等同运算符判定的,而不是用==运算符判定的,所以表达式必须在没有类型转换的情况下进行匹配。

5.2for/in语句

For(variable in object)

{statement

}

Variable应该是一个变量名,声明一个变量的var语句,数组的一个元素或者是对象的一个属性。Object是一个对象名。

在循环体执行之前,对象的一个属性名会被作为字符串赋给变量variable。在循环体中可以使用这个变量和[]运算符查询该对象属性的值。

注意,for/in循环中的variable可以是任意的表达式,只要它们的值适用于赋值表达式的的左边即可。

JS的数组是一种特殊的对象,因此可以像循环对象属性那样枚举数组下标。

如果for/in循环的主体删除了一个还没有枚举出的属性,那么该属性就不再枚举,如果循环主体定义了新属性,那么循环是否枚举该属性则由JS的实现决定。

For/in循环并不会遍历所有对象的所有可能的属性,那些被标记为只读的、永久的或不可列举的,这些属性使用此语句是枚举不出来的,所有用户自定义的属性可以枚举的!

5.3function语句

函数定义可以嵌套在其它函数定义中,但是只能嵌套在那些函数顶层中,也就是说,函数定义不能出现在IF语句,while语句或其它任何语句中。

在技术上说,function语句并非是一个语句.JS中语句会引发动态的行为,但是函数定义描述的却是静态的程序结构。语句是在运行时执行的,而函数则是实际运行之前,当JS代码被解析或被编译时定义的。当JS解析程序遇到一个函数定义时,它就解析并存储构成函数主休的语句,然后定义一个和该函数同名的属性(如果函数定义在其它的函数中,那么就在调用对象中定义这个属性,否则在全局对象中定义这个属性)以保存它。这会产生一些奇怪的行为。这认为它跟变量没有块级作用域特点有些相同。

例:

Alert(f(4));//displays 16

Var f=0;

Function f(x);

{

Reutrn x*x;

}

Alert(f);displays 0.f() has been overwritten by the variable f

出现这种情况是由于函数定义和变量定义出现在不同的时刻。

5.4return语句

如果一个函数执行了一个不带expression的return语句,或者因为它执行到了函数的尾部而返回,那么这个函数的表达式的值就是undefined。

5.5throw语句

Throw expression

Expression的值可以是任何类型的值,但通常它是一个Error对象或Error子类的一个实例。

5.6try/catch/finally语句

这个语句的使用和c#的使用差不多。

Try{} catch(e) {}finally{}

(六).对象和数组

6.1对象

6.1.1对象直接量

包含在一个花括号中,每个属性名可以是一个JS标识符或一个字符串或一个字符串,而每个属性值可以是一个常量或任意的JS表达式。

例:

Var empty={};

Var point={x:0,y:0};

Var homer={“name”:”homer”,”age”:34};

(2)new创建对象

Var d=new Date();

Var reg=new RegExp();

6.1.2对象属性

对象的属性和变量工作方式相似,即可以把值存储其中,也可以从中读取值。一旦通过给属性赋值创建了该属性,就可以在任何时刻修改这个属性的值。

Var book={};

Bool.widht=20//create

(1)属性的枚举

For/in语句枚举属性。

(2)检查属性的存在

In运算符可以用来测试一属性的存在

(3)删除属性delete运算符

删除属性并不是仅仅把属性设置为undefined,它实际上从对象中移除了属性,在删除之后,for/in将不会枚举该属性。

6.1.3作为关联数组的对象

就是用像读取数组的方式来读取属性值。

Obj.propery;

Obj[“property”]//关联数组

6.1.4通用ojbect属性和方法

1.constructor属性

每个对象都有一个constructor属性,它引用了初始化这个对象的构造函数。

例:

Var d=new Date();

d.constructor==Date//return true

2.hasOwnProperty()方法

如果此方法中指定的参数属性来自本地定义的一个非继承的属性,此方法返回true。

Var o={};

O.hasOwnProperty(“unde”);//return false,the property is not defined

O.hasOwnProperty(“toString”);//false,toString is an ihherited property

Math.hasOwnProperty(“cos”);//true:the Math object has a cos property

3.propertyIsEnumeralbe()方法

如果此方法中指定的参数属性来自本地定义的一个非继承的属性,并且如果这个属性可以在一个for/in循环中枚举,此方法返回true。

注意,一个对象的所有用户定义的属性都是可以枚举的,不能枚举的属性通常是继承的属性,因此这个方法几乎总是会和hasOwnProperty()返回相同的值。

4.isPrototypeOf()方法

如果此方法所属的对象是参数的原型对象,那么就返回true。

Var o={};

Object.prototype.isPrototypeOf(o);//true

Object.isPrototypeOf(o);//false

6.2数组

6.2.1创建数组

字面值创建数组

Var empty=[];

Var primes=[2,3,4];

Var misc=[1.1,true,”ik”];

直接量的值还可以是表达式

Var base=23;

Var table[base,base+3,base+4];

直接量还可以是对象直接量或数组直接量

Var b=[[1,{x:1,y:2}],2];

未定义的元素通过忽略逗号之间的元素值来创建

Var count=[1,,2];//数组有三个元素,中间的元素没有赋值

Var undef=[,,];//数组有2个元素,全部为赋值

用Array()构造函数创建数组

Var a=new Array():

Var b=new Array(3,2.3,4,”saf”,”sf”);

Var c=new Array(10);//这里的每个元素都没有赋值为undefined

6.2.2数组的读写

(1).添加数组新元素

JS中可以在任何时刻改变元素个数,而且由于JS数组是稀疏的,即数组的下标不必落在一个连续的数字范围内,只有那些真正存储在数组中的元素才能由JS实现分配内存。

a[0]=1;

a[100]=2;

这里JS解释器只给数组下标为0和100的元素分配内存,而试图访问其它的元素时将得到一个undefined

(2).删除数组元素

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 彻底理解js中this的指向,不必硬背

    彻底理解js中this的指向,不必硬背

    2016-02-26 08:25

  • AngularJS使用HTML5摄像头拍照

    AngularJS使用HTML5摄像头拍照

    2016-02-23 09:42

  • JS框架中的变动和变动检测

    JS框架中的变动和变动检测

    2016-01-26 19:24

  • JS魔法堂:函数重载 之 获取变量的数据类型

    JS魔法堂:函数重载 之 获取变量的数据类型

    2016-01-26 12:56

网友点评
>