上一节还有一个注意的地方:建议所有函数的必需参数使用命名参数,而非必须的参数使用对象来封装。
通过这几天的读书,发现了一个深入了解所学知识的一个捷径——读书。本来我在计算机这方法的所有知识一般都是从视频中摸索着学习的,
所以后来就养成了一个习惯,感觉学点东西没有视频讲解自己都有点学不下去。但是实习了以后发现没有那么一大把的时间来供我学习看视频,
幸好程序袁有生俱来的危机感使我意识到应该找到另一个学习到东西的途径,于是我就开始了阅读,当然我们阅读的时候一定要结合自己在项目
中遇到的问题,带着疑问来读书。这样我们就摆脱了一个大坑——都死书,死读书。
所以我再这里建议在刚刚学习计算机的时候我们应该看一点视频这样我们可以更快的发现自己的兴趣点,到了有一定基础的时候,应该换一
种得到知识的途径,因为书中记载的还是比较详细,并且我们得到一些知识也是一些人从书上得到的,然后转达给我门,但是每个人看书时认为
知识的重点都是不同的,我们从别人那里汲取的养分都是他们吸收完的,虽然这样再某种意义上我们可以更快的'入门',但是缺少了一种快感,一种
经过自己的思考后得到知识的快感。
好了,说了这么多总之一句话有条件的同志们开始读书吧。开始我们今天的内容。
Array数组
再这里建议大家创建数组和创建对象一样,我们都应该使用字面量表示法(如下),因为使用字面量来创建数组或者对象就不会调用Array或Object
的构造函数。提高一点效率。
var arr = ['red','green','blue'];
var obj = {
name: 'kim',
age: 12
};
array.length:不是一个只读的属性,还可以给数组赋值长度。
var arr = ['red','green','blue'];
arr.length = 4;
arr[3] = 'black';
alert(arr[3]);
检测数组instanceof,isArray:
对于一个网页,或者全局环境来书使用instanceof操作符就可以检测数组。
if(value instanceof Array){
//dosomething
}
instanceof他假定单一的全局执行环境,当网页包含多个框架,那就存在两个全局执行环境,如果你从第一个执行环境中传入到另一个执行环境一个数组
那么这个数组就与第二个全局执行环境的原生数组分别具有自己不同的构造函数。所以为了解决这个弊端,ECMAScript 5 中新增了Array.isArray();方法。
if(Array.isArray(arr)){
//dosomething
}
join:
var colors = ['red','blue','green'];
alert(colors.join('||'));//red||blue||green
模拟栈、队列
栈都操作的都是末端元素,我们可以用push(),来推入元素,用pop();来弹出元素。(LIFO)
var colors = ['red','blue','green'];
colors.push('black');
alert(colors[3]);//black
var item = colors.pop();
alert(item);//black
队列是在末端插入,在前端移除,用push()来推入,用shift();移除元素(FIFO)
var colors = ['red','blue','green'];
colors.push('black');
alert(colors[3]);//black
var item = colors.shift();
alert(item);//red
有shift就有unshift();就是在前端插入元素。这里就不再赘述了
数组排序:
reverse()就是反转数组顺序。
var arr = [1,2,4,5,3];
arr.reverse();
alert(arr);//35421
因为上面的方法不够灵活,就出现了 sort();
sort();方法会把数组中原有的元素都调用对应的toString()方法,然后比较String的大小,按照从小到大的顺序进行排序。
var arr = [0,1,5,10,15];
arr.sort();
alert(arr);//0,1,10,15,5因为字符串"10"位于字符串"5"的前面,所以这个方法也不狗灵活,因此sort()还可以接受一个比较函数
sort()接受一个比较函数,比较函数就是返回1说明第一个参数应该位于第二个参数之后,0就是两个参数相等,-1第一个参数位于第二个参数之前
function compare(value1,value2){
return value2 - value1;//意味着有大到小排序
}
var values = [0,1,5,10,15];
values.sort(compare);
alert(values);//15,10,5,1,0
其他array方法:
var colors = ['red','green','blue'];
var colors2 = colors.concat('yellow',[black,white]);//concat把接受到的参数一个个附加到原有数组的副本的后面,然后返回这个副本。
alert(colors2);//red,green,blue,yellow,black,white
var colors3 = colors.slice(1);//slice就是可以断章取意(基于这个数组的一个或多个重新创建一个数组),只有一个参数就是从参数这个下标到数组的最后,
var colors4 = colors.slice(1,2); //有两个参数就是从第一个参数这个下标开始取第二个参数这么长。
alert(colors3);//green,blue
alert(colors4);//green,blue
concat和slice都不会影响原有数组
var remove = colors.splice(0,1);//splice中只有两个参数那么说明是删除从第0个开始取到1这个长的元素
alert(colors);//green,blue
alert(remove);//red
var add = colors.splice(1,0,'yellow','black');//从下标是1的位置开始删除0个元素,然后再插入两个yellow,black两个元素
alert(colors);//green,yellow,black,blue
alert(add);//返回一个空数组
var replace = colors.splice(1,1,'red','pink');//就是在下标是1的位置删除1个元素,然后再插入两个red,pink两个元素
alert(colors);//green,red,pink,black,blue
splice操作的就是原有数组
indexOf()和lastIndexOf();接受两个参数一个是要查找的元素,第二个是查找起点位置的索引,indexOf()从前往后,lastIndexOf()从后往前
迭代方法:
every();就是迭代数组中的每一个元素,当所有元素都满足给定函数,并都返回true,则返回true
some();就是迭代数组中的每一个元素,只要有一个元素满足给定函数,并都返回true,则返回true
filter();就是迭代数组中的每一个元素,只要有一个元素满足给定函数,并都返回true,则返回这些项组成的数组
var numbers = [1,2,3,4,5,5,6,7,1];
var result = numbers.every(function(item,index,array){
return (item>4);
});
alert(result);//false
var result2 = numbers.some(function(item,index,array){
return (item>4);
});
alert(result2);//true
var result3 = numbers.filter(function(item,index,array){
return (item>4);
});
alert(result3);//5,5,6,7
map();对数组的每一项运行给定函数,返回每次函数调用的结果组成的数组
var numbers = [1,2,3,4,4,3,2,1];
var results = numbers.map(function(item,index,array)){
return item * 2;
};
alert(results);//2,4,6,8,8,6,4,2
foreach();便利数组的每一项,对每一项执行一些自定义的操作,没有返回值
var numbers = [1,2,3,4,4,3,2,1];
numbers.foreach(function(item,index,array)){
//dosomething;
};