程序猿刚子的博客

大龄程序猿,分享互联网开发相关知识!前端、后端,架构等内容,欢迎关注公众号 chengxuyuangangzi

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

JavaScript高级程序设计(2) 引用类型

 

Object类型

所有引用类型的基类,有两种声明的方法;

1.       Var o = new Object();

2.       Var o = {};

一般以方式2进行可选参数的传递, 当然全部的参数也可以以方式二传递,依个人习惯而定。

         function showinfo(person)

         {

                   var info = "";

                   for ( var i in person )

                   {

                            info += i + ":" + person[i] + "\n";

                   }                

                   alert(info);

         }

         showinfo({name:'xs', age:21, sex:'male'});

 

         作为可选参数时我们通过typeof以确定参数是否存在,如下

         function showinfo(name, age, options)

         {

                   var info = "name:" + name + "\nage:" + age+"\n";

 

                   for ( var i in options )

                   {

                            if (typeof i != "undefined")                

                                     info += i + ":" + options[i] + "\n";

                   }                

                   alert(info);

         }

         showinfo('song', 21, {sex:'male'});

 

Array类型

Array有多种声明方式,十分灵活,如下:

1.       Var item = new Array;

2.       Var item = new Array();

3.       Var item = new Array(5); //指定初始元素的个数

4.       Var item = new Array(1,32,45,r56,567,567,56); //指定初始元素,可以包含不同类型数据

5.       Var item = [];

 

转换方法:

所有对象都具有toLocaleString()toString()valueOf()方法,数组的这几个转换方法总是先调用对象的相应方法然后再拼接在一起 红字解释说明用例如下:

         var man = {               

                   toString:function(){

                            return 'a man';

                   },

 

                   toLocaleString:function(){

                            return 'a localeman';

                   }

         };

 

         var animal = {

                   toString:function(){

                            return 'a animal';

                   },

 

                   toLocaleString:function(){

                            return 'a localeanimal';

                   }

         };

 

         var items = Array(man, animal);

         alert(items.toString());              //a man, a animal

         alert(items.toLocaleString());  //a localeman, a localeanimal

 

栈方法:

1.       push
可以接受任意个参数,把它们添加到数组末尾并返回修改后数组的元素个数

2.       pop
移除数组末尾一位,并返回移除数据项

队列方法:

1.       shift
移除数组的第一项,并返回移除数据值

2.       unshift
在数组第一项前添加数据,可以接受任意个参数,除ie外其他浏览器均返回修改后数组的长度值(ie返回undefined

重新排序方法:

1.       reverse
反转数组元素顺序

2.       sort
数组元素toString后进行排序,可以接受比较函数自定义自己的排序规则。比较函数规则:第一个参数在第二个参数前那么返回负数,相等则返回0 第一个参数在第二个参数后面则返回正值。

操作方法:

1.       Concat
基于当前数组创建一个新的数组;参数可以接受单个值或者数组

2.       Slice
返回数组的一部分。接受两个参数1.起始位置 2.结束位置(不包含),如果参数为负数则加上数组长度进行转换

3.       Splice
数组内部插入、删除元素方法
删除:2个参数,指定起始位置和删除元素的个数

插入:起始位置, 00代表插入), 插入的元素(可以是多个参数)

替换:起始位置,替换元素的个数, 替换元素

 

Date类型

构造:

Var d = new Date();默认返回当前时间;可以传递到utc时间的毫秒数作为参数。在javascript中提供了Date.parseDate.UTC两个方法返回指定参数代表的毫秒数,如果参数无效那么返回NaN

 

RegExp类型

表达式格式:var exp = / pattern / flags;

Flags:

g:表示全局

i:不区分大小写

m:表示多行

 

RegExp实例属性:

Global:是否设置了g标志

ignoreCase:是否设置了i标志

lastIndex:搜索下一个匹配项的字符位置

multiline:是否设置了m

source:字符串形式的正则表达式

 

 

RegExp实例方法:

Exec

接受一个字符串,返回匹配项的信息

额外属性:

Index:匹配字符串的位置

Input:原字符串

返回值:是一个数组,第一项为匹配整个匹配项,随后为子匹配项

 

test()

只返回true或者false

 

RegExp构造函数属性

lastMatch lastParen leftContext 等提供了一些静态属性

另外还有9个属性用于房屋捕获组 方式:RegExp.$1…

 

Function类型

#!函数实际是一个指向函数对象的指针

声明方式:

方式一、

Function sum(n1, n2){

         Return n1+n2;

}

 

方式二、

Var sum = function(n1, n2){

         Return n1+n2;

}

 

方式三、

Var sum = new Function(“n1”, “n2”, “return n1 + n2”);

 

没有重载特性!

Function t1(){ return “t1”;}

Function t1(){ return “t2”;}

第一个声明始终会被第二个覆盖,实际上换另外一种方式更容易理解

Var t1 = function(){return “t1”;}

T1 = function(){return “t2”;}

同变量一样,后面的会覆盖掉前面的声明;

 

函数声明与变量表达式的区别:

函数声明解析器会率先读取,并使其在任何代码之前可用;而函数表达式如同变量一样,只有解析到代码时才可用。

 

把函数作为参数传递

可作为参数,作为返回值等。正如Array类实例的sort方法可以接受一个有两个参数的函数,我们可以自定义一个函数,然后传进去,现在自定义一个函数,功能就是返回一个比较函数:

Function customsort()

{

         Return function(a, b){

                   Return a - b;

}

}

 

函数的内部属性

Arguments包含函数的参数, arguments有个名叫callee的属性,其指向拥有该参数的函数(在递归中经常用到)

 

This函数在执行时所处的作用域

 

函数的属性和方法

Length定义了函数应该接受的参数个数

Prototype属性以后说明

 

每个函数都有apply() call()两个方法,是在特定的作用域中调用函数,以改变函数内部this的指向。

唯一的区别就是接受的参数不同,apply接受一个作用域对象,一个参数数组;call接受一个作用域对象,和所有的参数

 

posted on 2011-08-02 11:26  程序猿刚子  阅读(223)  评论(5编辑  收藏  举报