数组
数组的定义方法
- 字面量 let arr = []; 稀松数组 let arr = [1,23,4];
- new Array(); let arr = new Array(); let arr = new Array(1,23,4,5,5); 当只有一个参数的时候,这个参数表示数组的长度
数组的读写
- 溢出读,返回undefined
数组常用的方法
改变原数组
- .push() 向数组的最后一位push值 返回数组的长度
Array.prototype.push() = function(){
for(let i = 0;i <arguments.length;i++){
this[this.length] = arguments[i]
}
return this.length;
}
- pop() 剪切数组的最后一位 返回数组长度
- shift() 剪切数组的第0位 返回数组长度
- unshift() 向数组的第0位添加值, 返回数组的长度
- reverse() 逆转原数组
- splice(a,b,c) a : 从第几位开始,b : 截取多少的长度,c : 在切口处添加新的数据 负数表示从后面数
- sort() 给数组排序,但是会逐位比较ASCII码 所以排序可能不准确
- sort() 有预留接口 可自己添加函数
1. 必须写两个形参
2. 看返回值 1。当返回值为负数时,那么前面的数放在前面
2. 正数,后面的数放前面
3 0 不变
arr.sort(function(a,b){
if(a > b){
return 1;
}else{
return -1;
}
})
- Math.random() 返回一个(0-1) 之间的随机数
不改变原数组 ()
- concat() 连接两个数组 原数组不改变
- toString() 将数组变转为字符串
- slice(a,b) a : 从a位开始截取 b : 截取到该位 /只有一个参数 从该位截取到最后
- join(’-’) 将数组连接为字符串 通过参数连接
- 字符串方法 : split(’-’) 按照参赛将字符串拆为数组
类数组 (长的像数组,但是没有数组方法)
可以利用属性名模拟数组的特性
可以动态的增长length属性
如果强行让类数组调用push方法,则会根据length属性值的位置进行属性的扩充
- 属性要为索引(数字)属性,必须有length属性,最好加上push方法
push方法内部原理
Array.prototype.push() = function(target){
this[this.length] = target;
this.length ++ ;
}
- 类数组
let obj = {
'0' : 'a',
'1' : 'b',
'2' : 'c',
'name ' : 'abc',
'age' : 12,
length : 3,
push : Array.prototype.push,
splice : Array.prototype.splice
}