数组
数组是某类数据类型的有序集合,数据类型可以是number(数值),
string(字符串),undefined(声明未赋值),null(空),boolean(布尔类型),
对象(object)
一个数组里面可以使用多种数据类型,数组就动态的,不需要指定大小;
数组里面的每个值叫元素,每个元素在数组中都有数字位置编号,
也就是下标 从0开始;
创建数组的方式:
1.使用构造函数Arrar去定义数组
var color =new Array("red","green");//使用Array函数定义数组,(直接写元素)
console.log(typeof color,color);//object,["red","green"]
var arr= new Array(2);
//如果new Array()后接的是一个数值类型,那么这个数字就是数组的长度,数组中的每个元素都是undefined
console.log(arr);//[2]
console.log(arr.length);//获取数组的长度
console.log(arr[0],arr[1]);//获取数组中的每个值
var arr01 =new Array();//new Array() 括号中没放任何东西,那么创建的是一个空数组
arr01 = [1,2,3,4];//对空数组重新赋值
2.使用字面量表示法
var arr02 = [1,"2",undefined,true,null,[1,2],{a:1}];
//使用数组字面量表示法定义数组,数组的元素可以是任意数据类型
console.log(arr02);
数组的属性
数组的属性,length(长度),个constrctor(构造方法)
var arr03=[1,12,123,1234,12345,123456];
console.log(arr03.length);//获取数组的长度
//数组的最小下标为0,最大下标等于长度减1
var num = arr03.length+2;//num=8
console.log(arr03);
arr03[8] = 12345678;
console.log(arr03);
console.log(arr03[6],arr03[7]);
//如果通过索引赋值,索引超过了数组的长度,数组的长度发生变化,
//前面没有赋值的元素会使用undefined补齐(自动补齐)
var arr04 = [1,2,3];
console.log(arr04.length);//3
arr04.length=2;
console.log(arr04);//[1,2]
//如果数组重新赋值的长度小于数组原长度,那么输出的是赋值后的数组长度的内容
var arr05 = [1,2,3,4,5];
arr05.length=7;
console.log(arr05);//[1,2,3,4,5,undefined,undefined]
//数组重新赋值的长度大于原来的长度,那么输出的是赋值后的数组长度的内容,后面自动适应undefined补齐
arr05[5] =6;//通过给数组中的某个元素重新赋值,可以改变该元素
arr05[6] = 7;
console.log(arr05);//[1,2,3,4,5,6,7]
数组的大小是有限制的,最小是0,最大是2^23-1、
不建议直接改数组的大小,访问数组的时候,要确保索引不会越界
清空数组:
//1.通过改变数组的长度去清空数组
arr05.length=0;
console.log(arr05);
//2.使用delete
console.log(arr04);
delete arr04[1];
//delete根据下标去删除数组中的某一项,只删除元素,被删除的元素使用undefined代替,数组长度不变
console.log(arr04);
//3.使用fill()
console.log(arr02.fill());//使用undefined填充整个数组,数组长度不变
//数组遍历
var arr06=['小米','小龙'];
for(var i=0;i<arr06.length;i++){
console.log(arr06[i]);
}
for(var j in arr06){//遍历对象一般用for in
console.log(arr06[j]);
//j是对应下标,arr06[j]是数组中下标对应的元素;
}
//constructor,用来进行对象类型的判断的
var arr08=[];
var obj={};
var str="123";
console.log(arr.constructor);
console.log(obj.constructor);
console.log(str.constructor);
数组分为下标数组和纬度数组
下标数组分为索引数组和关联数组
索引数组就是下标为numer(数值类型)的数组
关联数组就是下标为string(字符串)的数组
关联数组的元素不计入数组的长度,所以没办法通过下标去访问
索引数组和关联数组的区别
索引数组用于储存数据,优势在与迭代方便
关联数组用于存放对应的数据格式,特定的key对应特定vakue值但是迭代麻烦
var arr09 = [];
arr09["name"]="小米";
arr09['age']=18;
arr09['sex']="男";
arr09["location"]="广州"
console.log(arr09);
for( var i in arr09){
console.log(arr09[i]);
// if(i=="name")document.write("他叫"+arr09[i]);
// if(i=="age")document.write("今年"+arr09[i]);
// if(i=="sex")document.write("性别"+arr09[i]);
// if(i=="location")document.write("来自"+arr09[i]);
}
document.write("他叫"+arr09.name+"今年"+arr09.age+"性别"+arr09.sex+"来自"+arr09.location);
var arr07 = [];
arr07["name"]="小红";
arr07['age']=18;
arr07['sex']="女";
arr07["location"]="广州";
arr07["subject"]=[];
arr07["subject"]["math"]="数学";
arr07["subject"]["chinese"]="语文";
arr07["subject"]["English"]="英语";
arr07["subject"]["PE"]="体育";
arr07["hobby"]=[];
arr07["hobby"]["football"]="足球";
arr07["hobby"]["reading"]="看书";
console.log(arr07);
for(var i in arr07){
console.log(arr07[i]);
if(arr07[i].constructor==Array){
for(var j in arr07[i]){
console.log(arr07[i][j]);
}
}
}
document.write("<br />"+"她叫"+arr07.name+",今年"+arr07.age+",性别"+arr07.sex+",来自"+arr07.location+",<br />学科:"+arr07.subject.math+"、"+arr07.subject.chinese+"、"+arr07.subject.English+"、"+arr07.subject.PE+"。<br />兴趣:"+arr07.hobby.football+"、"+arr07.hobby.reading+"。");
// document.write('<br>她叫'+arr07['name']+',今年'+arr07['age']+'岁,性别'+arr07['sex']+',籍贯'+arr07['location']+',她的学科有'+arr07['subject']['math']+','+arr07['subject']['chinese']+','+arr07['subject']['English']+';她的爱好有'+arr07['hobby']['football']+'和'+arr07['hobby']['reading']);
//数组类型:isArray()
/*
* 使用isArray()函数来判定数组,Array.isArray(变量名),返回true,说明是数组,返回fales是非数组
*/
var arr10=[];
var obj01={};
console.log(Array.isArray(arr10));
console.log(Array.isArray(obj01));