最近看了一下红皮书,就整理一下,提炼一下里面的知识点!数组
建立方式函数
先从数组的建立方式提及,有两种建立方式spa
能够给构造函数传参数,若是只传一个参数,而且这个参数是数值,那么就建立该数值大小的数组,其余状况就是建立包含这些参数的数组code
数组的每一项都是能够保存任何类型的数据的,var arr = [1,"hello",true,{a:1}];可是不推荐保存不一样类型的值对象
length属性blog
1.它的值永远等于数组索引的最后一项+1排序
var arr = [1,2,3]; arr[9] = 10; console.log(arr.length);//10
2.用length属性来达到push()函数的效果索引
var arr = [1,2,3]; arr[arr.length] = 4; console.log(arr);//[1, 2, 3, 4] arr.push(5); console.log(arr);//[1, 2, 3, 4, 5]
检测方法队列
可使用instanceof操做符和isArray()函数(ES5)字符串
console.log([] instanceof Array);//true console.log({} instanceof Array);//false console.log(3 instanceof Array);//false console.log(Array.isArray([1]));//true console.log(Array.isArray({}));//false
转换方法
全部的对象都有toLocalString()、toString()和valueOf()方法
对于数组的toString()方法,当数组调用的这个方法的时候是在数组的每一项上调用这个方法使他们都变成字符串,而后再把它们拼接成用逗号隔开的字符串
调用valueOf()仍是返回原数组
栈方法和队列方法
push()和pop()方法是LIFO(后进先出)
shift()和unshift()方法是FIFO(先进先出)
重排序方法
reverse()和sort()方法
先说简单的reverse()方法
var arr = [1,2,3]; var newArr = arr.reverse(); console.log(arr);//[3, 2, 1] console.log(newArr);//[3, 2, 1]
它使数组的项倒序排列,它修改了原数组,而且返回值也是修改后的数组
sort()方法就比较麻烦了,在默认状况下即不传参时,是按升序排列数组的,为实现排序,sort()方法会调用每一个数组项的toString()方法,而后比较获得的字符串,再来肯定如何排序,即便每一项都是数值,也要先转换成字符串。
var arr = [1,5,12,24,3,2]; arr.sort(); console.log(arr);//[1, 12, 2, 24, 3, 5]
1,12,2,24,3,5这是什么排大小的逻辑呀,怎么不给我升序排列呀,这是由于它比较的是字符串,先从第一字符比起,而后再是第二个······
因而,能够给这个方法传递一个比较函数,规则是这样的:若是第一个参数应该位于第二个参数以前则返回一个负数;若是两个参数相等,则返回;,若是第一个参数应该位于第二个以后则返回一个正数。
var arr = [1,5,12,24,3,2]; function compare(a,b) { if(a > b) { return 1; } else if( a < b) { return -1; } else { return 0; } } arr.sort(compare); console.log(arr);//[1, 2, 3, 5, 12, 24]
此次就行了,对于比较的只是数值类型(注意是数值是前提)比较函数还能够这样写
function compare(a,b) { return a - b; }
这个形式就简单多了!
操做方法
concat()方法用于拼接数组,具体说就是先建立当前数组的一个副本,而后将接受到的参数添加到这个副本的末尾,最后返回新构建的数组
var arr = [1,2]; var arr2 = arr.concat(3,4,[5,6]); console.log(arr);//[1, 2] console.log(arr2);//[1, 2, 3, 4, 5, 6]
slice()方法用于截取数组,可接受一个或者是两个参数,即起始位置和结束位置,在只有一个参数时,slice()返回从该参数指定位置开始到当前数组末尾的全部项。若是是
两个参数,则返回起始位置和结束位置(可是不包括结束位置)之间的数组项;
var arr = [1,2,3,4,5,6]; var arr2 = arr.slice(0,1); var arr3 = arr.slice(1); var arr4 = arr.slice(2,5); var arr5 = arr.slice(2,6); var arr6 = arr.slice(-4,-1);//等价于arr.slice(2,5) var arr7 = arr.slice(5,2); console.log(arr);//[1, 2, 3, 4, 5, 6] console.log(arr2);//[1] console.log(arr3);//[2,3,4,5,6] console.log(arr4);//[3,4,5] console.log(arr5);//[3,4,5,6] console.log(arr6);//[3,4,5] console.log(arr7);//[]
能够看出不包括结束位置的项,而且容许slice方法的参数是负值,若是是负值则用数组的长度加上该负数来肯定相应的位置,还有就是若是结束位置小于起始位置就返回空数组
splice()方法虽然与slice()只有一个字母之差,可是它实现的功能不少,它能对数组实现三项功能:1.删除,2.插入,3.替换
删除:须要指定两个参数:要删除的第一项的位置和要删除的项数
var arr = [1,2,3,4,5,6]; var arr2 = arr.splice(2,3); console.log(arr);//[1,2,6] console.log(arr2);//[3,4,5]
插入:能够向指定的位置插入任意数量的项,须要提供3个参数:起始位置,0,要插入的项;若是要插入多个项,能够再传入第四个,第五个参数
var arr = [1,2,3,4,5,6]; var arr2 = arr.splice(2,0,7,8); console.log(arr);//[1, 2, 7, 8, 3, 4, 5, 6] console.log(arr2);//[]
替换:能够向指定位置替换任意项,需提供三个参数,起始位置,要删除的项数和要插入的任意数量的项,插入的项数没必要与删除的项数相等。
var arr = [1,2,3,4,5,6]; var arr2 = arr.splice(2,1,7,8); console.log(arr);//[1, 2, 7, 8, 4, 5, 6] console.log(arr2);//[3]
splice始终都会返回一个数组,该数组中包含从原始数组中删除的项,若是没有删除就返回空数组
位置方法
ES5中新添加的两个方法:indexOf()和lastIndexOf(),都接受两个参数:一个是要查找的项,和可选的表示查找的起点位置的索引,这两个方法的区别就是:indexOf()是从数组的开始查找,lastIndexOf()是从数组的末尾开始查找,它们都返回要查找项在数组的位置,若是没有找到的话就返回-1,而且在查找过程当中是使用的全等操做符,还有就是他只能找到一个,若是数组中有多个相同的项要找,它只能找到第一个先发现的项
var arr = [1,2,3,4,5,6,6,3,2]; console.log(arr.indexOf(3));//2 console.log(arr.lastIndexOf(6));//6 console.log(arr.indexOf(3,3));//7 console.log(arr.lastIndexOf(2,3));//1
下次介绍迭代方法和归并方法