JS这一块呢,本人曾经天真的以为只是为了做些页面特效就ok了,随着时间的深入,接触的东西越来越多,越发觉得当初学JS的时候是多么的随心所欲,于是整了本厚厚的犀牛书,慢慢啃~,顺带在博客上留下学习笔记,一做纪念,二则若有同道指点,亦是感激不尽。
既然是学到数组的时候动了记录足迹的心思,那就从数组学习开始好了。
JS数组的定义与其他语言并没有什么区别,不过,JS数组是动态的:根据需要他们会增长或缩减,并且在创建数组时无需声明一个固定大小或者在数组大小变化时无需重新分配空间。JS数组的另外一个特点是其内容可能是稀疏的,他们之间可能有空缺。每个JS数组都有一个length属性。一般来说数组的length即数组元素个数,但是针对稀疏数组来说,length的值显然要比所有元素的索引要大。
1、了解了数组的这一特点之后,开始正式进入数组的学习。既然是学习数组,那么肯定是要有个数组来供人操作才行,这里,就需要进行数组的创建,下面是几种常见的数组创建形式:
1 var empty = []; //空数组 2 var primes = [2,3,4,5]; //直接设置4个值的数组 3 var misc = [1.1,true,"a",]; //3个不同类型的元素和结尾的逗号,共4个元素
4 var a = [1,,3]; //数组有3个元素
从第三个数组我们可以知道,JS数组直接量中的值不一定要是常量,甚至它们可以是任意的表达式:
var base = 1024; var table = [base,base+1,base+2,base+3];
纯手打,写的纠结,还是直接记下学习过程中的一些不懂之处得了~~~
其他部分就简写个标题。
2、数组元素的读和写
3、稀疏数组
4、数组长度
JS数组的两个特殊行为:
1.赋值时当数组元素索引大于或等于现有数组的长度时,length属性的值将设置为i+1;
2.设置length属性为一个小于当前长度的非负整数n时,当前数组中的那些索引值大于或等于n的元素将被删除;
5、数组元素的添加和删除
尾 头
添加:push(); unshift();
删除:pop(); shift();
delete:对一个数组元素使用delete不会修改数组的length属性,也不会将元素从高索引处移下来填充已删除属性留下来的空白,而是直接变成了一个稀疏数组。
6、数组遍历
1. for循环
通常来说,稠密数组直接使用for进行性循环即可,但是很多情况下频繁的数组操作数的数组可以说是早已千疮百孔也不为过,那么,针对某些特殊情况的稀疏数组,往往需要排除null、undefined、和不存在的元素
for(var i = 0;i < a.length;i++){ if(!a[i]) continue;//跳过null、undefined和不存在的元素 //循环体 } for(var i = 0;i < a.length;i++){ if(a[i]===undefined) continue;//跳过undefined和不存在的元素 //循环体 } for(var i = 0;i < a.length;i++){ if(!(i in a)) continue;//跳过不存在的元素 //循环体 }
但是由于for/in循环能够枚举继承的属性名,如添加到Array.prototype中的方法。因此,在数组上不应该使用for/in循环,属非食用额外的检测方法过滤不想要的属性。
如下两种方法二选其一即可:
for(var i in a){ if(!a.hasOwnProperty(i)) continue; //跳过继承属性 } for(var i in a){ //跳过不是非负整数的i if(String(Math.floor(Math.abs(Number(i))))!==i) continue; }
2. forEach()方法