数组
#### 一、数组的概述
数组的概念(标准定义):数组是一个可以存储一组或一系列相关数据的容器。
数组的概念(理解定义): 一组数的集合,称为”数组”。
比如说求全班同学年龄的总和的平均数?
var age1 = 20;
var age2 = 23;
var age3 = 26;
。。。
var age60 = 21;
var sum = age1 + age2 + age3 +….+ age60;
var n=60;
var arr = [10,20,30,40,50];
这样很麻烦工作量也很大,万一人数增加了或减少了很不方便。用数组做循环很方便。
var arr=[ “张三”, ”男”, 24, ”本科”, ”北京大学”];
数组的元素:是指存储在数组中并赋予唯一索引号的数据段。简单来说就是数组中的每个值,称为一个”数组元素”。
数组的作用:为了解决大量相关数据的存储和使用的问题。
例:村庄散住户,楼房住户,找的时候通过门牌号找 。
二、数组的创建
(1)使用new关键字和Array()来创建数组(也叫构造函数方法)
var arr = new Array();//创建一个空数组
var arr = new Array(“张三”,”男”,24,”未婚”,”本科”,”北京大学”);//创建一个数组,并初始化数组的元素。
(2)使用[]方式创建一个数组
var arr = [“张三”,”男”,24,”未婚”,”本科”,”北京大学”];
注意点:数组元素的值,可是任何类型。如:字符型、数值型、布尔型、数组型、对象型、函数、对象型。
三、数组常用知识
1、数组的索引(index)
a、数组中有多个值,每个值都有一个”编号”,通过”编号”可以访问到数组中的每个值,数组中的”编号”又称”下标”或”索引号”。
b、数组中的”下编号”是从0开始的正整数。也就是说:第1个数组元素下标为0,第2个数组元素下标为1,
第三个数组元素下标为2,以此类推。
c、第1个数组元素下标一定是0,最后一个数组元素的下标是:长度-1;
d、使用数组的目的,就是使用循环遍历数组很方便。
2、数组的属性
数组对象属性length:就是指数组中元素的总个数。
3、数组元素的访问
数组元素的访问 例如:
var arr=[10,20,30,40,50];
var arr=["张三","男",24,"本科","北京大学"];
访问的方法是:数组变量名,后跟一个中括号[],[]中括号内是数组元素的下标。如:arr[3];
4、数组的操作
1)读取元素:读取已经存在下标的元素。如:var age = arr[2];
2)修改元素:修改已经存在下标的元素的值(重新赋值)。如:arr[2] = 25;
3)增加元素:添加一个不存在的下标的元素。
4)删除元素:使用关键字delete,只能删除元素值,而下标还在。
实例:使用数组保存个人信息,并输出结果。
5、数组的遍历
什么是遍历?就是从数组中把数据一个一个的读取或写入。
1)普通for循环
var arr6 = [1, 2, 3, 4, 5, 6];
alert(arr6);
顺序遍历
for(var i = 0; i<arr.length; i++)
{
alert(arr6[i]);
}
逆序输出
for(var i = arr.length-1; i>=0; i--)
{
alert(arr[i]);
}
2)for…in 语句用于遍历数组或者对象的属性(快速遍历) 作用:只能遍历数组和对象
语法:for(变量 in 集合) 集合:数组名和对象名
for(var i in arr)
{
alert(arr[i]);
}
6、数组的方法
shift():删除数组中第一个元素,并将长度减1.
pop():删除数组中最后一个元素,并将长度减1.
unshift():往数组前面添加一个或多个数组元素,长度要改变。
push():往数组结尾添加一个或多个数组元素,长度要改变。
concat() : 方法用于连接两个或多个数组, 不改变原数组。返回一个新的数组。
reverse() 逆向排序, 原数组也被逆向排序了
toString() 将数组转成字符串
join(“拼接符”)将数组转成字符串,中间以拼接符连接
slice(start,end): 不修改原数组, 将原数组中的指定区域数据提取出来。start开始 end结束。 如果参数是负值表示从倒数开始。不含结束位置
splice
删除:用于删除元素,两个参数,第一个参数(要删除第一项的位置),第二个参数(要删除的项数)
插入:向数组指定位置插入任意项元素。三个参数,第一个参数(开始位置),第二个参数(0),第三个参数(插入的项)
注意点:第二个参数(0)为0不会删除任何项
替换:向数组指定位置插入任意项元素,同时删除任意数量的项,三个参数。第一个参数(起始位置),第二个参数(删除的项数),第三个参数(插入任意数量的项)
sort() 方法对数组进行排序
a-b 如果它的值为正数,就交换它们的位置
b-a 如果值为正数,交换它们的位置
7、数组的排序
1)冒泡排序
思路:随便输入几个个无序的数字,从头到尾依次比较相邻两个数字大小,若大数在前、小数在后,则交换两数位置,依次比较,使全部数据按从小到大排列。
var arr = [5, 3, 7, 1];
通过上面的例子我们了解到,所谓冒泡排序是一种比较形象的说法,一组数中两两按着大小不同交互顺序,就像我们平时看到的气泡一样是从低一层一层往上冒泡泡一样。在这里不要想复杂了,一直纠结在冒泡两字上。只要记住它最终的作用就是按着规律排序。
2)选择排序
思路:将第一位依次与后面的元素相比较,得到最小值,与第一位交换。再用第二位依次与后面元素相比较,得到最小值,与第二位交换。
3)数组去重
四、堆和栈
五、对象
对象的介绍
我们知道之前学习数据类型时,提过对象,说它是复合数据类型,什么数组,函数都是复合数据类型,它们的最显著特点就是一个变量名可以存多个值。当然对象也是可以存多个值,和数组函数类似的一种东西。
人就是一个”对象”, 人的特征(属性)有:身高、体重、姓名、性别、年龄。每个人可以有不同的本事(方法):打游戏、玩打飞机、炒股、开车等都是方法。你们现在只要理解对象是由”属性”和”方法”构成的就行。其实我们学习对象也就是学习它的属性和方法。
JS中对象分类
JS内置对象:数组对象、日期对象、字符串对象。。。。。等。
BOM对象,浏览器各组件对象,包括:window、document、location、history。。。。
DOM对象,文档对象,包括:所有的HTML标记,每一个HTML标记都是一个对象。
自定义对象,根据自己的项目需要,要自己定义自己的对象。
对象的创建
//1、使用new关键字结合构造函数Object()来创建一个空的对象
var obj=new Object();
//添加属性
obj.name=”小明”;
obj.sex=”男”;
obj.age=24;
obj.isMarried=true;
obj.edu=”大专”;
obj.school;
//添加方法
obj.showInfo=function(){}
//2、使用大括号{}来创建一个对象
var obj={
name : “张三”,
sex : “男”,
age : 24,
isMarried : true,
edu : “大专”,
school : undefined
showInfo : function(){}
}
六、Json表示对象的方法
JSON介绍
概念:
JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)。JSON和JS对象的格式是一样的,只不过JSON字符串中的属性名必须加双引号。
JSON的特点:
1、JSON 是轻量级的文本数据交换格式
2、JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。
3、JSON 具有自我描述性,更易理解
为什么使用JSON:
JS中的对象只有JS自己认识,其他语言都不识别。JSON就是一种特殊的字符串,这个字符串可以被任意的语言所识别,并且可以转为其他语言中的对象,JSON主要用于数据交换
JSON的分类:
1、对象表示 {}
var obj = '{"name" : "张三", "age" : 18, "sex" : "男"}'
2、数组表示 []
var arr = '[10, 66, "hello", true]';
注意点:JSON里面能设置的值的类型,字符串、数值、布尔、null、对象、数组,不能是函数,因为其他语言不能识别
例如:
var obj = '{"name" : "张三", "age" : 18, "sex" : "男"}'
var arr = '[10, 66, "hello", true]'
var obj = '{"arr" : [1, 2, 3]}'
var arr = '[{"name" : "张三", "age" : 18, "sex" : "男"},{ "name" : "李思","age" : 20,"sex": "女"}]'
JSON转对象的方法:
JSON.parse()可以将JSON字符串转为js对象。
JS对象转JSON的方法:
JSON.stringify() 可以将JS对象转为JSON字符串
eval()方法(了解):
把字符串转成一个对象
eval()这个函数可以用来执行一段字符串形式的JS代码,并将执行结果返回
var str = "alert('hello')";
eval(str);
如果使用eval()执行的字符串中含有{}, 它会将{}当成代码块执行,如果不希望将其当成代码块解析,则需要在字符串前后各加一个()
var obj = eval("("+'{a:1}'+")");
在开发中尽量不要使用,首先的执行性能比较差,然后它还有安全隐患