JavaScript数组特性与实践应用深入详解
本文实例讲述了JavaScript数组特性与实践应用。分享给大家供大家参考,具体如下:
JavaScript提供了一种类似数组特性的对象,它把数组的下标变为字符串,作为对象的属性。虽然它比一个真正的数组来的慢,但是使用起来很方便。
1数组字面量
数组字面量是在一对方括号中包围零个或多个用逗号分隔的值的表达式:
varempty=[]; varnumbers=[ 'zero','one','two','three' ]; console.log(empty[1]);//undefined console.log(numbers[1]);//one console.log(empty.length);//0 console.log(numbers.length);//4
数组对象继承自Array.prototype,所以numbers继承了大量有用的方法。
JavaScript允许数组包含任意混合类型的值:
varmisc=[ 'string',11.3,false,true,null,undefined,['nested','array'],{object:true},NaN,Infinity ]; console.log(misc.length);//10
2长度
数组有一个length属性,但它是没有上界的。如果用大等于当前length的数字作为下标来存储元素,那么length属性值会被增大以便容纳新的元素,而不会发生数组越界现象哦O(∩_∩)O~
length属性的值很诡异,它是数组最大整数属性名加1,即它不一定等于数组的元素个数:
varmyArray=[]; console.log(myArray.length);//0 //myArray只包含一个属性,但length的值等于这个数组最大整数的属性名加1 myArray[100000]=true; console.log(myArray.length);//100001
[]后置运算符会把它包含的表达式转换为字符串,如果表达式有toString()方法,那么就会调用它。这个字符串被当做属性名,如果这个字符串是一个大等于当前length值而且小于4294967295的正整数,那么这个数组的length就会被重置为新的下标加1。
可以直接设置length的值。设置更大的length值不会为数组分配更多的空间;而把length设小则会导致所有下标大等于新的length的属性被删除:
//删除元素 numbers.length=3; console.log(numbers);//["zero","one","two"]
把下标指定为数组的当前length,就可以把一个新元素附加到数组的尾部:
//新增元素 numbers[numbers.length]='four'; console.log(numbers);//["zero","one","two","four"]
使用push()可以更方便地实现同样的功能:
//新增元素(push) numbers.push('good'); console.log(numbers);//["zero","one","two","four","good"]
3删除
JavaScript数组就是对象,所以可以用delete移除元素:
deletenumbers[2]; console.log(numbers);//["zero","one",<1个空的存储位置>,"four","good"]
可惜的是,这会在数组中留下一个空洞!而我们希望的是:删除后,被删除元素的后续元素会自动地往前移动。
JavaScript数组提供了splice()方法,它接受下列参数:
①.数组的索引。
②.要删除的元素个数。
③.其他参数(多个)-把这些参数依次插入到索引位置。
//第一个参数是索引号,第二个参数是要删除的元素个数 numbers.splice(2,1); console.log(numbers);//["zero","one","four","good"]
4枚举
JavaScript数组是对象,所以可以用forin语句来遍历数组的所有属性。可是forin语句无法保证属性的顺序,而且可能从原型链中得到意外的属性。
可以使用for来避免上述的问题:
vari, myArray=numbers; for(i=0;i5数组与对象
如何在这两者进行选择?当属性名是小而连续的整数时,使用数组;否则使用对象。
JavaScript的typeof会认为数组是object,这没有意义!
我们可以定义一个函数来检测数组:
varis_array=function(value){ returnvalue&&typeofvalue==='object'&& value.constructor===Array; };这个方法在不同窗口(window)或框架(frame)里构造的数组会失败。所以请用下面的这个更好的方法:
varis_array=function(value){ returnObject.prototype.toString.apply(value)==='[objectArray]'; }; console.log(is_array(myArray));//true6方法
JavaScript提供了一些对于数组可用的方法,它们被存储在Array.prototype中。我们可以为数组增加一个对数组进行计算的方法:
//新增可以对数组中的元素进行计算的方法 Array.method('reduce',function(f,value){ vari; for(i=0;i这样所有的数组都继承了这个方法。它接受一个函数与初始值为参数。然后遍历数组,并通过函数计算出新值,最后返回这个值。
//创建数字数组 vardata=[9,16,32,192,8]; //定义加法与乘法函数 varadd=function(a,b){ returna+b; }; varmult=function(a,b){ returna*b; }; console.log(data.reduce(add,0));//257 console.log(data.reduce(mult,1));//7077888因为数组就是对象,所以也可以直接给数组添加方法:
data.total=function(){ returnthis.reduce(add,0); }; console.log(data.total());//257因为字符串“total”不是整数,所以不会改变数组的length值。当属性名是字符串时,它就会成为数组的属性。
7指定初始值
如果使用[]得到的新数组,它将是空的。这是如果访问它,将会得到undefined。我们可以实现一个可以初始化数组元素值的方法:
//为每一个元素指定初始值 Array.dim=function(dimension,initial){ vara=[],i; for(i=0;iJavaScript数组的元素可以是数组,通过这种方式来实现多维数组功能:
//数组的数组 varmatrix=[ [0,1,2],[3,4,5] ]; console.log(matrix[1][0]);//3可以扩展Array方法,让它可以初始化矩阵:
/** * *@paramm第一维个数 *@paramn第二维个数 *@paraminitial初始值 */ Array.matrix=function(m,n,initial){ vara,i,j,mat=[]; for(i=0;i感兴趣的朋友还可以使用本站在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun测试上述代码运行结果。
更多关于JavaScript相关内容还可查看本站专题:《JavaScript数组操作技巧总结》、《JavaScript字符与字符串操作技巧总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript错误与调试技巧总结》
希望本文所述对大家JavaScript程序设计有所帮助。