学习JS的第6天
一、数组
1.什么是数组?
数组的概念(标准定义):数组是一个可以存储一组或一系列相关数据的容器。
作用:用于在单个的变量中存储多个值。
2、数组的创建
1、字面量形式
var arr = [ '张三',18,'男','rap'];
2、使用构造函数的方式
var arr = new Array(); //这是空数组
var arr = new Array("张三","男",24,"未婚","本科","北京大学");
注意点:数组元素的值,可是任何类型。如:字符型、数值型、布尔型、数组型、对象型、函数、对象型。
3、数组的索引
a、数组中有多个值,每个值都有一个”编号”,通过”编号”可以访问到数组中的每个值,数组中的”编号”又称”下标”或”索引号”。
b、数组中的”下编号”是从0开始的正整数。也就是说:第1个数组元素下标为0,第2个数组元素下标为1,
第三个数组元素下标为2,以此类推。
c、第1个数组元素下标一定是0,最后一个数组元素的下标是:长度-1;
d、使用数组的目的,就是使用循环遍历数组很方便。
4、数组的元素访问与长度
数组元素的访问 例如:
var arr=[10,20,30,40,50];
var arr=["张三","男",24,"本科","北京大学"];
//访问的方法是:数组变量名,后跟一个中括号[],[]中括号内是数组元素的下标。如:arr[3];
//数组的长度 数组名.length 例如arr.length
5、数组的操作
1)读取元素:读取已经存在下标的元素。如:var age = arr[2];
2)修改元素:修改已经存在下标的元素的值(重新赋值)。如:arr[2] = 25;
3)增加元素:添加一个不存在的下标的元素。
4)删除元素:使用关键字delete,只能删除元素值,而下标还在。
实例:使用数组保存个人信息,并输出结果。
6、数组的遍历
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]);
}
7、数组的方法
shift():删除数组中第一个元素,并将长度减1.
pop():删除数组中最后一个元素,并将长度减1.
unshift():往数组前面添加一个或多个数组元素,长度要改变。如:arrObj.unshift(“a”,”b”,”c”);
push():往数组结尾添加一个或多个数组元素,长度要改变。如:arrObj.push(“a”,”b”,”c”);
concat() : 方法用于连接两个或多个数组, 不改变原数组。返回一个新的数组。
reverse() 逆向排序, 原数组也被逆向排序了
toString() 将数组转成字符串 //toString();里面的参数用于进制转换。如toString(2) 转换2进制
join(“拼接符”)将数组转成字符串,中间以拼接符连接
slice(start,end): 不修改原数组, 将原数组中的指定区域数据提取出来。start开始 end结束。 如果参数是负值表示从倒数开始。不含结束位置
splice
删除:用于删除元素,两个参数,第一个参数(要删除第一项的位置),第二个参数(要删除的项数)
插入:向数组指定位置插入任意项元素。三个参数,第一个参数(开始位置),第二个参数(0),第三个参数(插入的项)
注意点:第二个参数(0)为0不会删除任何项
替换:向数组指定位置插入任意项元素,同时删除任意数量的项,三个参数。第一个参数(起始位置),第二个参数(删除的项数),第三个参数(插入任意数量的项)
练习:
要求将数组中的0项去掉,将不为0的值存入一个新的数组,生成新的数组
var a = [1,3,0,4,0,0,5,2];
function qu0(arr){
var newArr = []; //创建一个新的数组
for (var i = 0; i<arr.length;i++ ) {
if (arr[i] != 0) { // 判断不为0
newArr.push(arr[i]); //依次添加到新的数组
}
}
return newArr ;
}
var res = qu0(a);
console.log(res);
二、拷贝传值与引用传址
1、拷贝传值:将一个变量的值"拷贝"一份,传给了另一个变量
var a=10;//声明变量
var b=a;//将变量a的值"拷贝"一份,赋给变量b
a=100; //重新给变量赋值100
console.log(b);//10
console.log(a);//100
拷贝传值:基本数据类型都是"拷贝传值"。
拷贝传值,就是将一个变量的值"拷贝"一份,传给了另一个变量。也可以说是复制。
拷贝传值中,两个变量之间没有任何联系,修改其中一个变量的值,另一个不会改变。
这两个变量之间,是相互独立的,没有任何联系。
基本数据类型存在"快速内存"(也叫栈内存)中的。因为,基本数据类型只有一个变量名和一个变量值。
2、引用传址:复合数据类型都是"引用传地址"
复合数据类型的存储分两步:
a、将变量名和数据地址存"快速内存"(也叫栈内存)中。
b、具体的数据存在"慢内存"(也叫堆内存)中。
引用传址:将一个变量的数据地址,“拷贝"一份,传给了另一个变量。这两个变量,指向"同一个地址”。
大家共享同一份数据。
如果其中一个变量的值发生了改变,那么,另一个变量的值也得变。要变一起变。
因此,这两个变量是有联系的,要变大家一起变。
var arr = ["小帅",18];
var newArr = arr;//将arr的地址,"拷贝"一份,传给了另一个变量newArr
arr[0]='大帅'; //给变量arr[0]重新赋值
alert(newArr[0]); //newArr[0]='大帅'
栈区(stack)
堆区(heap)