//测试Chrome版本 40.0.2214.115 m //如有问题,欢迎指出 //=====数组的声明方式 有两种 //对数组的一些常用方法进行深入 //var arr1=new Array[3];//数组的长度 //这是错误的 var arr1=new Array(3); var arr2=new Array(3,2,3,5); var arr3=new Array([1,2,3,4],[1,2,3],[1,2]); //字面量 var arr4=[[2,3],[2],[0]]; //console.info(arr1); //console.info(arr2); //console.info(arr3); //console.info(arr4); //----------------------------------------------- //========数组有两种方法遍历 //第一种 for(var i=0;i<arr2.length;i++){ console.info(arr2[i]); } //第二种 for(var i in arr3){ console.info(arr3[i]); } //=========操作数组的一些方法 //按栈和队列来 //第一种出入栈 arr3.push(44);//在数组的最后添加一个 console.info(arr3);//[Array[4], Array[3], Array[2], 44] console.info(arr3.pop());//弹出最后一个元素,并且返回其值 //队列 //先进 arr3.unshift(33); console.info(arr3); console.info(arr3.shift());//弹出头部元素,返回删除的值 console.info(arr3); //将数组合并 //算是向一个数组中添加一个数组的元素 //注意一个问题就是它不会改变数组现有的值,只是返回一个副本 console.info(arr1.concat(arr2));//这显示数组长度虽为7,里面元素只是arr2中的元素 //console.info(arr1); document.write(arr2.concat(arr2)); console.info(arr3.concat(arr1,arr2)); console.info(arr3);//只是返回副本 //=====将数组转化为字符串,再将字符串转化为数组 var str1=arr2.join(",");//转化 console.info(str1); console.info(str1.split(",")); // 再转化 //此时数组里面的数字为字符串类型 //转化为字符串的还有其它的方法,如 var str33=[1,1,1,1,1];//还有toLocalString就不说了,我基本上是没用过 console.info(str33.toString()); //===对数组进行排序 //注意一个问题 //1默认是按字符串排序 (可添加方法参数来改变) //降序来一个 console.info(arr2.sort(function(val1,val2){ if(val1>val2){ return -1;//如果大于不改变顺序 }else { return 1;//否则 } })); //另一个就是翻转数组了,感觉没什么用 console.info(arr2.reverse()); //对数组进行截取 splice 与slice var arr5=[1,2,3,4,5,6,7,8,9]; console.info(arr5.slice());//返回原数组 console.info(arr5.slice(-2,9))//[8, 9] //对于一个函数 //在jQuery中经常有这样类似的用法 var slice=[].slice; function aa(){ console.info(arguments); console.info(slice.call(arguments,1)); } aa("sfsd","fs","fdsa"); //对于这splice参数不同作用不同 //第一种两个参数时 //第一个参数是要删除的起始下标 //第二个参数是要删除的项数 var arr6=[1,2,3,4,5,6,7,8,9]; console.info(arr6.splice(2,2));//删除的是 0: 3 1: 4 console.info(arr6); //当是三个参数时,就是下面这种情况 //第一个参数是起始下标 //第二个参数是删除的项数 //第三个参数是插入的项数 形如:item1,item2... //总结过来就是,第二个参数为0时就是插入了,有第二个项就是先删,再插 console.info(arr6.splice(2,0,3,4));//[]无返回值 console.info(arr6);//[1, 2, 3, 4, 5, 6, 7, 8, 9] //再者就是新添加的数组方法了 //对比jQuery做个比较 //第一个indexOf 和lastIndexOf //第一个参数要找的项,第二个参数是从哪里找,用法简单,实现原理也是简单 console.info(arr6.indexOf(7,5));//返回6 //这是下标 //方法一出来的时候ie是不支持的那么就是这种兼容处理了 //下面方法只是随便写,没有运行测试 if(typeof(Array.prototype.indexOf)!=="function"){ Array.prototype.indexOf=function(){ var value=arguments[0]; i=arguments[1] || 0; for(;i<this.length;i++){ if(value===this[i]){ return i; }else if(i==this.length-1){ return -1; } } } } //主要关注这些方法 forEach,map ,some,every,filter //此处涉及回调函数的应用 //上述方法也很有可能涉及兼容问题 //forEach(arr6,console.info); //拿forEach与some做个例子 var each=function(obj,callback){ var value, length=obj.length, i=0; for(;i<length;i++){ //若是返回false,则直接跳出 value=callback.call(obj,i,obj[i]); if(value===false){ break; } } return obj; }; console.info(each(arr6,function(_,value){ alert(value); })); //实现some //只要数组有一个符合,立刻跳出,并显示跳出时的值 //直接使用上面的方法就可以得到想要的 console.info(each(arr6,function(_,value){ if(value>5){ alert(value); return false; } })); //到此结束