一、封装type方法
定义对象方式:
- 自变量
- 构造函数
- 自定义的构造函数
- Object.create
定义数组的方式:
- var arr=[];数组自变量;
- var arr=new Array();系统调用。两者区别就只一位数的情况
数组能用的方法来源于Array.prototype
例:
var arr = [1, , 1];
数组不是每一位都有值,稀疏数组
var arr = new Array();
var arr1 = new Array(1, 2, 3, 4, 5);
var arr = new Array(10);
长度为10的稀疏数组,括号里面只有一位数时,就代表着长度,并且里面每一位都没有值,connsole里面会是empty*10。并且里面不能写小数,会报错
var arr = [];
数组的读和写,基本上没有报错的情况,除非是引用了没有的方法
js数组是基于对象的,数组是一种特殊的对象
二、数组的定义
(来源于Array.prototype)
1)new Array(length/content); var arr = new Array(1,2,3,4,5 );
2)字面量 var arr = [1,2,3,4,5];
三、数组的读和写
arr [ num ] //不可以溢出读,结果 empty
arr[num] = XXX; //不可以溢出读
arr[num] = xxx; //可以溢出写
es3.0 最标准最基础 es5.0 es6.0,最新的 es7.0 还没有普及,今天讲的都是 es3.0
对象的定义方式
1 字面量.
2 构造函数,
3 自定义构造函数
4object.create
数组是一种特殊的对象,在本质上两者没有太大的区别
如传进去的参数是一个小数,就非法
四、数组常用的方法
一、改变原数组(在原来数组基础上去改变)
1)reverse、sort、push、pop、unshift、shift
2)splice
二、不改变原数组
1)forEach、filter、map、reduce、reduceRight
2)slice、concat、join、split、toString
在控制台上操作
例 push是在数组的最后一位添加数据,可以添加一个,也可以添加很多个
例说明push方法能重写
var arr = [];
Array.prototype.push = function() {
return "xixi";
}
例:
数组有三位,想在数组最后一位添加东西
var arr=[1,2,3];如果在第四位加东西写成arr=[3]
//length-1位添加东西
模拟push内部方法的使用
<script>
var arr = [1, 2, 3];
Array.prototype.push = function() {
for (var i = 0; i < arguments.length; i++) {
this[this.length] = arguments[i];
}
return this.length;
}
</script>
Array.prototype.push = function() {
//不能写形参
例:pop是剪切方法(把最后一位数剪切出去)。在pop()括号里面不能传参,写了会忽略
var arr = [1, 2, 3];
pop是从最后一位剪切东西
push是从最后一位塞东西
例: unshift是从第一位加东西
var arr=[1,2,3];
例:shift是从第一位减东西
var arr=[1,2,3];
例:数组不能从-1位插入东西
可以用两个数组拼接的方式添加东西
例:reverse逆反
var arr=[1,2,3]
例:splice是一种剪切,切片
var arr=[1,1,2,2,3,3];
//这是从第零位到第五位
//arr.splece(从第几位开始,截取多少长度,传参在切口处添加新的数据)
arr.splice(1,2) //从第一位开始截取2位,传参可以不填
截取的是[1,2]
例:arr.splice(1,1,0,0,0)
//意思是从第一位起截取一位,然后加上0,0,0这三个数
例:var arr=[1,2,3,5]
//1是第0位,2是第一位,3是第二位,5是第三位
arr.splice(3,0,4)
变成arr=>1,2,3,4,5
var arr=[1,2,3,4]
arr.splice(-1,1)
//这里的-1是倒数第一位
数组一般的方法都可以带负数
例:下面是系统内部解决负数的问题的兼容
var arr = [1, 2, 3, 4];
splice = function(pos) {
pos += pos > 0 ? 0 : this.length;
}
// 1 + 4 = 3;
例:sort给数组排序(按照从小到大),改变原数组
var arr = [1, 3, 4, 0, -1, 9];
在sort后面加reverse就是降序
例:下面这个是按asc码排序的
var arr=[1,3,5,4,10];
所以sort给我们留了个接口,如下图
sort是按照asc码排序的
1、必须写两个形参
2、看返回值return
1)当返回值为负数时,那么前面的数放在前面
2)当返回值为正数时,那么后面的数在前
3)为0,不动
var arr = [1, 3, 5, 4, 10];
arr.sort(function(a, b) {
if (a > b) {
return 1;
} else {
return -1;
}
});
return 1 此处的1代表返回正的
return -1 此处的-1代表返回负的
思维方式:上面就控制了升序
这个函数第一次调动时,就会把数组的第一位和第二位传进来,也就是a=1,b=3,然后通过规则比较,当你把返回值返回为正,为负,为0
传参的顺序(但是这个顺序是数字位置的顺序,不是按数字比),第一次是1,3,第二次是1,5,第三次是1,4,第四次是1,10,第五次是3,5,第六次是3,4,第七次是3,10,第八次是5,4,第九次是5,10,第十次是4,10;依次传参(符合冒泡排序的算法)
是以换位置的方式改变顺序
例:var arr=[2,13,19,4]
//到13这一位时,换位置变成了[2,4,19,13]
//下面这种方式变成了降序
var arr = [2, 10, 20, 4, 8, 9, 10];
arr.sort(function(a, b) {
if (a < b) {
return 1;
} else {
return -1;
}
});
//简化版
var arr = [2, 10, 20, 4, 8, 9, 10];
arr.sort(function(a, b) {
return a - b;
});
升序是return a-b
降序是return b-a
直接调用arr.sort()比的是asc码,要在里面填函数才可以
var arr = [2, 20, 10, 20, 4, 8, 9, 10];
arr.sort(function(a, b) {
return b - a;
});
例:给一个有序的数组,乱序排序
当我们没规律可以循环的时候,返回的是随机的
var arr = [1, 2, 3, 4, 5, 6, 7];
arr.sort(function(a, b) {
return Math.random() - 0.5;
});
//Math.random()会生成一个0到1(包括0,但是不包括1)的随即数
例:给他们三个按照年龄升序
例:按字符串长度排序
例:按字节长度排序
例:concat连接,把后面的数组拼到前面,并成立一个新的数组,不影响之前的两个数组,不能改变原数组
例:toString是把数组当做字符串展示出来
例:slice从该位开始截取,截取到该位,并不改变原数组,这里也可以写负数
var arr=[1,2,3,4,5,6];
//slice(从该位开始截取,截取到该位)
slice并不改变原数组,slice完了以后需要有东西接收,不然没有意义
slice里面可以填0个参数,也可以填1个参数,也可以填两个参数
1、如果填两个参数,slice(从该位开始截取,截取到该位
如arr.slice(1,2)从第一位开始截取,截取到第二位)
2、如果填一个参数,从第几位开始截取,一直截取到最后
如arr.slice(1)从第一位开始截取,截取到第二位)
3、不写参数就是整个截取数组(把类数组转换成数组的时候经常会使用到
例:join括号里面需要用字符串形式(标准语法规定),就会用加的东西连接起数组
例:join可逆的东西:split()是String字符串方法
split按照什么拆分为数组
用什么拆,什么就没了
按-拆就去掉-
按4拆就去掉4
split可以返回数组,数组可以返回字符串
例:把下面字符串拼到一起
下面这种写法不好,字符串是在栈内存里面的
用下面这种方式更好,join里面不传参默认用逗号连接,传空串如下图