JavaScript学习笔记整理之引用类型

引用类型是JavaScript中很重要的内容。引用类型是一种数据结构,用于将数据和功能组织在一起。它描述的是一类对象所具有的属性方法。Object是一个基础类型,Array是数组类型,Date是日期类型,RegExp是正则表达式类型,等。

曾经名不经传的JavaScript随着AJAX的流行而身价倍增,现在JavaScript不再仅仅是WEB开发中一个可有可无的辅助工具,甚至有了专门属于它的职位“JavaScript工程师”,那怕你仅仅是一名WEB后台开发程序员,你都必须了解JavaScript,至少在一些相关招聘职位要求上你可以看到“熟悉JavaScript优先”的字眼。甚至我还要告诉你,你将可以用JavaScript开发桌面软件,这得益于Adobe AIR的另外一种开发模式,即用HTML+CSS+JavaScript开发AIR。

1. 创建:

rush:js;"> var dog = new Object();

常应用于存储和传输数据。比如存储:

rush:js;"> var person = new Object(); person.name = "Nicholas"; person.age = 29;

创建的第二种方式:(在创建时,属性名也可以是字符串格式,即:可以给属性名加引号。)

rush:js;"> var person = { name : "Nicholas",age : 29 };

2.取出属性值:person["name"];或者:person.name;

一个数组可以保存任意类型的数据(大杂烩)。

1.数组可以动态调整(多加一个数据,它自己就增长一个长度,不是死的。)。

2.创建:

rush:js;"> var stars=new Array();//方式1 var stars=new Array(20);//方式2 var stars=new Array("周杰伦","林俊杰","孙燕姿");//方式3 var stars=Array(20);//方式4 var stars=["周杰伦","孙燕姿","林俊杰"];//方式6

3.动态调整示例:

rush:js;"> var stars=["周杰伦","孙燕姿"]; stars[1]="JJ";//动态改变(把林俊杰变为JJ) stars[3]="皮裤汪";//动态增长(加了一个长度) stars.length=1;//动态强制缩减(林俊杰、孙燕姿、皮裤汪强制移除,长度变为1)

4.检测数组:Array.isArray(value);

5.用join()把数组转换成有分隔符的字符串:

rush:js;"> var stars = ["周杰伦","王尼玛","张全蛋"]; alert(stars .join(",")); //周杰伦,王尼玛,张全蛋 alert(stars .join("-")); //周杰伦-王尼玛-张全蛋

6.可以像栈一样使用数组(pop()出来,push()进去)。

7.可以像队列一样使用数组。(结合shift()和push()):

rush:js;"> var stars = new Array(); //create an array var count = colors.push("周杰伦","王尼玛"); //push two items alert(count); //2 count = stars .push("张全蛋"); //push another item on alert(count); //3 var item = colors.shift(); //get the first item alert(item); //周杰伦 alert(colors.length); //2 /**所谓栈变队列,其实就是把栈颠倒过来再拉取*/

8.排序。

1.reverse()

翻转数组顺序;(返回经过排序后的数组)

2.sort()

从小到大排序。但是是按字符串排序,不是按数字排序:(返回经过排序后的数组)。

rush:js;"> var values = [,]; values.sort(); alert(values); //,

要想按你预期的方式排序,可以给sort()里面加一个比较函数当作参数:

rush:js;"> function compare(value,value) { if (value < value) { return -; } else if (value > value) { return ; } else { return ; } } var values = [,]; values.sort(compare); alert(values); //,

简化版本的比较函数(sort只关心返回的是正数、负数还是0):

rush:js;"> function compare(value1,value2){ return value2 - value1; }

9.对数组的操作:联结、切片、拼接。

1.联结

:使用concat,记忆:concat-->concatenate:连结,连锁。

举例:

rush:js;"> var stars = ["周杰伦","张全蛋"]; var stars = stars .concat("太子妃",["花千骨","梅长苏"]); alert(stars); //周杰伦,张全蛋 alert(stars); //周杰伦,张全蛋,太子妃,花千骨,梅长苏

2.切片

。使用slice,记忆:slice翻译:切片。举例:

rush:js;"> var stars = ["梅长苏","誉王","靖王","霓凰","飞流"]; var stars= stars.slice(); var stars= stars.slice(,); alert(stars); //誉王,靖王,霓凰,飞流(从第一个位置开始切) alert(stars); //誉王,霓凰(从第个位置切到第个位置,表示半封闭,不包含)

3.拼接

。splice。功能强大。可以删除、插入、替换。

1.

删除任意数量的项:比如:splice(0,2),删除第0,1项(半封闭区间)(返回删除项)。

2.

指定位置插入任意数量的项:比如:splice(2,"周杰伦","王尼玛"),从第2个位置开始插入周杰伦、王尼玛两项。

3.

指定位置插入任意数量的项且同时删除任意数量的项。比如:splice(2,1,"王尼玛"),从第2个位置删除1项,然后开始插入周杰伦、王尼玛两项。

10.位置方法:indexOf,lastIndexOf;

11.迭代方法

分为:全部合格才通过、任意一个合格就通过、过滤部分渣渣,一对一映射,迭代查询,缩减。

1.全部合格才通过:

2); }); alert(everyResult); //false

上例中每一项都大于2才返回true。

2.任意一个合格就通过:

2); }); alert(someResult); //true

上例中,有一个大于2就返回true。

3.过滤部分渣渣:

2); }); alert(filterResult); //[3,3]

上例中,把大于2的都过滤掉。

4.一对一映射:

rush:js;"> var numbers = [1,1]; var mapResult = numbers.map(function(item,array){ return item * 2; }); alert(mapResult); //[2,6,8,10,2]

上例中,给每一项都乘以2.

5.迭代:使用for-each。

6.缩减:reduce。

rush:js;"> var values = [1,5]; var sum = values.reduce(function(prev,cur,array){ return prev + cur; }); alert(sum);//15

累加求和返回,5项缩为1项。 

1.

var expression=/ pattern / flags;

2.flags分三种

:g(global全局模式,应用于所有字符串)、i(case-insensive,忽略字母大小写)、m(multiline,多行模式,一行检验完了接着下一行。)。举例:

rush:js;"> /**匹配字符串中所有'at'的实例*/ var pattern1=/at/g; /**匹配第一个'bat'或'cat',不分大小写*/ var pattern2 =/[bc]at/i; /**匹配所有以'at'结尾的3个字符组合,不分大小写*/ var pattern3=/.at/gi;

3.

模式中所有的元字符必须转义,元字符:( { [ \ ^ $ | ) ? * + . ] }

4.Function类型

1.

每个函数都是Function类型的实例,而且与其他引用类型一样,都有属性方法

2

.函数的两种定义方法

方法1:

rush:js;"> function sum(a,b){ return a + b; }

方法2:

rush:js;"> var sum=function(a,b){ return a + b; }

3.函数没有重载。

rush:js;"> var a="Jay Chou is a superstar"; var b=a.substring(0,8);

上例中,a是基本类型,但是a可以调用substring方法,是因为,后台自动完成a的包装操作,创建String类型的一个实例。Boolean,Number也类似。

1.所有全局作用域中定义的函数、变量,都是Global对象的方法,比如:parseInt,isNaN等。

2.eval()方法也是Global对象的方法,它负责解析javascript。

3.Math对象是保存数学公式和相关信息的。它有很多方法, 如:min求最小值,max求最大值,ceil()向上取整,floor向下取整,round四舍五入,random取随机数。

ps:引用类型理解:变量的交换等于把现有一间店的钥匙(变量引用地址)复制一把给了另外一个老板,此时两个老板同时管理一间店,两个老板的行为都有可能对一间店的运营造成影响。

引用类型例子

rush:js;"> function chainStore() { var store1=['Nike China']; var store2=store1; alert(store2[0]); //Nike China store1[0]='Nike U.S.A.'; alert(store2[0]); //Nike U.S.A. } chainStore(); //在上面的代码中,store2只进行了一次赋值,理论上它的值已定,但后面通过改写store1的值,发现store2的值也发生了改变,这正是引用类型的特征,也是我们要注意的地方

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...