数组的概念
用于保存一组数据的集合
数组的定义格式:
中括号或者new定义,里面每一个元素的结束的时候使用一个逗号隔开,最后一个元素可以不使用逗号结尾。
数组的申明
1.var a = [];
2.var a = new Array();
instanceof 查看某个变量是否是某个数据类型的实例
数组保存数据的格式
严格意义上来说数组可以保存任意格式的数据
如果数组中保存的还是一个数组,那么这个数组叫做多维数组
eg:
var a =[
[[1,2,3],2,3],
[4,3,2],
[8,2,7]
];
数组的键
数组的每一个元素都是由键与值组成
eg:
[1,2,3,4,5];
[
0 => 1,
1 => 2,
2 => 3,
3 => 4,
4 => 5,
]
['a','b','c']
[
0 => 'a',
1 => 'b',
2 => 'c',
]
数组的键是从0开始的,是一个递增的数值队列
object.keys 获取某一个数组所有的键,返回的也是一个数组,这个数组是由原数组的键组成的。当然这个数组也有自己的键。
数组所有的键都是字符串格式的,只有看起来有点像数据格式,这个是和对象是一样的,对象所有的键也都是字符串格式的。
在获取数组的某一个值的时候,键名首先会转化为整型,然后整型转化为字符串,如果是带有小数点后面数字的小数就不行了
数据的访问形式
oDiv.style.display
oDiv['style']['display']
这个是对象的访问形式,不是数组的
数组只能使用[]的形式进行访问
arr[数字]
arr[变量]
数组也支持存放不是数字键的元素,但是这个元素是按照对象格式存放的,不计算在数组的元素个数中
可以使用对象的方式获取,也可以使用数组的方式获取
arr['name'] = 'zhangsan';
length
数组中最重要的一个属性,表示数组中元素的个数,
这个length是动态变化的,数组元素增加的时候,
length会自动变大,元素减少的时候,length会自动的减少,
如果手动设置length,那么数组也会发生变化。
数组的键是使用32位2进制来保存的,所有最大值是2^32-1;
也就是数组最多保存2^32-1个值
数组的可以是不连续的,但是length总是比最大的键名大1,
没有保存数据的位置是空位
delete(删除一个对象的属性)
也能够删除数组的元素,删除之后元素的值删除了,但是数组的长度不会发生改变,也就是length不会改变。
eg:
var a = {};
a.name = 'zhangsan';
a.age = 18;
a.sex = 'nan';
console.log(a);
delete a.age;
console.log(a);
in运算符
判断某一个键是不是在数组中,返回的是一个布尔值
eg:
var arr = [1,3,5,89];
console.log(2 in arr); //true 判断是键
console.log(89 in arr); //false
也能判断对象是否具有某个属性
eg:
//能不能判断对象的属性在不在对象里面
var zhangsan = {
"age":"14",
"height":"141",
"weight":"200",
};
console.log('age' in zhangsan);
console.log('age1' in zhangsan);
for……in
遍历数组,类似于while、for循环,但是比这两智能一点,会跳过空位
eg:数组
var arr = [];
arr[1] = 'ab';
arr[100] = 1000; //length
//for
for(var i =0;i<arr.length;i++){
console.log(arr[i]);
}
arr['name'] = 'laiya';
eg:对象
var zhangsan = {
"age":"14",
"height":"141",
"weight":"200",
};
for(var j in arr){
console.log(arr[j]);
}
for……in 遍历会将数组中不标准的键名和值也会遍历出来,而for、while循环不会
forEach遍历数组
eg:
var arr = [];
arr[1] = 'ab';
arr[100] = 1000; //length
//for
arr.forEach(function(){
console.log(1);
});
数组中的空位
数组中间的空位是计算在length里面的,但是里面没有值,获取的时候是undefined
eg:
var a = [1,2,,,,,3,4]
console.log(arr);
console.log(arr.length);
数组结尾的空位是不生效的,所以可以省略最后一个逗号
eg:
var a = [1,2,3,4,]
console.log(a);
console.log(a.length);
undefined与空位的区别:
eg:
var arr = [1,2,3,,,,,5,6];
console.log(arr[5]); //undefined
for(var i in arr){
console.log(i); // 01278
}
var arr1 = [1,2,3,undefined,undefined,3,4];
console.log(arr1[3]); //undefined
for(var j in arr1){
console.log(j) //0123456?
}
获取内容的时候都是undefined
真实空位在for……in循环的时候会自动跳过,而真实存储undefined的不会跳过
类数组对象
类似于数组的对象,具有length属性,这个属性表示的变量内部的元素的个数,但是这个length不会动态变化。
arguments:参数对象
字符串
绝对数的DOM集合,oDiv
数组函数
压栈函数:
push(推)向数组中添加一个元素,添加到数组的最后
pop(弹出)从数组中弹出一个元素,从最后删除一个元素
eg:
var arr = [1,3,5];
arr.push(9);
console.log(arr);
arr.pop();
console.log(arr);
unshift:向数组中添加一个元素,添加到数组的开头
shift:从数组中删除一个元素,从数组的开头删除
eg:
var arr = [1,3,5];
arr.unshift(9);
console.log(arr);
arr.shift();
console.log(arr);
splice:从数组中删除元素
splice(start,num)从start位置开始,删除num个元素
splice(start,num,……)从start位置开始,删除num个元素,然后将后面的所有的参数作为元素添加到这个删除元素的位置
如果num为0,那么在start的位置开始插入元素
eg:
var arr = [1,3,5,7];
arr.splice(1,0,100,200,11); //1 ,7
console.log(arr);
slice:数组截取,不会改变原来的数组,只是将截取出来的数据作为返回值单独返回
slice(start,end-1)返回的是start开始,到end-1的数组元素的集合,返回的也是一个数组
eg:
var arr = [1,2,3,4,5];
var a = arr.slice(1,4); //2,3,4
console.log(arr);
console.log(a);
join:将数组转化为字符串,默认是使用逗号连接
join(连接符):将数组元素使用连接符连接起来组成字符串
eg:
var arr0 = ['I',
'L','o','v','e','Y','o','u'];
var you = [5,2,0,1,3,1,4];
var arr = arr0.concat(you);
console.log(arr);
var str = arr.join('_');
console.log(str)
console.log(arr0);
console.log(you);
concat:合并数组
基本语法:数组1.concat(数组2);返回的是一个合并后的数组,并不会改变原来的数组
eg:
var arr0 = ['I',
'L','o','v','e','Y','o','u'];
var you = [5,2,0,1,3,1,4];
var arr = arr0.concat(you);
console.log(arr);
console.log(arr0);
reverse:数组翻转,会改变原来的数组
arr.reverse();
eg:
var arr = [1,2,3,4,5];
arr.reverse();
console.log(arr);
冒泡排序
基本语法:
for(){
for(){
}
}
eg:
var arr = [9,2,6,3,89,44,32,11];
//确定规则 从大到小
for(var i = 0;i<arr.length-1;i++){
for(var j = 0;j<arr.length-i;j++){
if(arr[j]<arr[j+1]){
var a = arr[j+1]
arr[j+1] = arr[j];
arr[j] = a;
}
}
}