JavaScript的数组也是一个比较有意思的主题,虽然名为数组(Array),但是根据数组对象上的方法来看,更像是将很多东西混在在一起的结果。而传统的程序设计语言如C/Java中,数组内的元素需要具有相同的数据类型,而作为弱类型的JavaScript,则没有这个限制,事实上,JavaScript的同一个数组中,可以有各种完全不同类型的元素。
方法:
concat()
连接两个或更多的数组,并返回结果。
join()
把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
pop()
删除并返回数组的最后一个元素。
push()
向数组的末尾添加一个或更多元素,并返回新的长度。
reverse()
颠倒数组中元素的顺序。
shift()
删除并返回数组的第一个元素。
slice()
从某个已有的数组返回选定的元素。
sort()
对数组的元素进行排序。
splice()
删除元素,并向数组添加新元素。
unshift()
向数组的开头添加一个或更多元素,并返回新的长度。
valueOf()
返回数组对象的原始值。
数组的特性
数组包括一些属性和方法,其最常用的属性则为length,length表示数组的当前长度,与其他语言不同的是,这个变量并非只读属性,比如:var array = new Array(1, 2, 3, 4, 5);
print(array.length);
array.length = 3;
print(array.length); //print是内置对象window的方法
print(array);
执行结果:
5
3
1,2,3
另一个与其他语言的数组不同的是,字符串也可以作为数组的下标,比如:var stack = new Array();
stack['first'] = 3.1415926;
stack['second'] = "okay then.";
stack['third'] = new Date();
for(var item in stack){
print(typeof stack[item]);
}
运行结果:
number
string
object
在这个例子里,还可以看到不同类型的数据是如何存储在同一个数组中的,这么做有一定的好处,但是在某些场合则可能形成不便,比如我们在函数一章中讨论过的sum函数,sum接受非显式的参数列表,使用这个函数,需要调用者必须为sum提供数字型的列表(当然,字符串无法做sum操作)。如果是强类型语言,则对sum传入字符串数组会被编译程序认为是非法的,而在JavaScript中,程序需要在运行时才能侦测到这一错误。使用数组
数组有这样几种方式来创建:
var array = new Array();
var array = new Array(10);//长度
var array = new Array("apple", "borland", "cisco");
不过,运用最多的为字面量方式来创建,如果第三章中的JSON那样,我们完全可以这样创建数组:
var array = [];
var array = ["one", "two", "three", "four"];
var array = [];
array.push(1);
array.push(2);
array.push(3);
array.push("four");
array.push("five");
array.push(3.1415926);
前面提到过,JavaScript的数组有列表的性质,因此可以向其中push不同类型的元素,接上例:var len = array.length;
for(var i = 0; i < len; i++){
print(typeof array[i]);
}
执行结果:
number
number
number
string
string
number
弹出数组中的元素:
for(var i = 0; i < len; i++){
print(array.pop());
}
print(array.length);
运行结果
3.1415926
five
four
3
2
1
0
从数组中取出一定数量的元素,不影响数组本身:
slice方法的第一个参数为起始位置,第二个参数为终止位置,操作不影响数组本身。下面我们来看splice方法,虽然这两个方法的拼写非常相似,但是功用则完全不同,事实上,[color=darkred]splice是一个相当难用[/color]的方法:
删除数组元素
虽然令人费解,但是JavaScript的数组对象上确实没有一个叫做delete或者remove的方法,这就使得我们需要自己扩展其数组对象。一般来说,我们可以扩展JavaScript解释器环境中内置的对象,这种方式的好处在于,扩展之后的对象可以适用于其后的任意场景,而不用每次都显式的声明。而这种做法的坏处在于,修改了内置对象,则可能产生一些难以预料的错误,比如遍历数组实例的时候,可能会产生令人费解的异常。
数组中的每个元素都是一个对象,那么,我们可以使用delete来删除元素吗?来看看下边这个小例子:
var array = ["one", "two","three","four"];
//数组中现在的内容为:
//one,two,three,four
//array.length == 4
delete array[2];
结果:
one, two, undefined, four
//array.length == 4
???
我的结果为one,two,,four
可以看到,delete只是将数组array的第三个位置上的元素删掉了,可是数组的长度没有改变,显然这个不是我们想要的结果,不过我们可以借助数组对象自身的slice方法来做到。一个比较好的实现,是来自于jQuery的设计者John Resig://Array Remove - By John Resig (MIT Licensed)
Array.prototype.remove = function(from, to) {
var rest = this.slice((to || from) + 1 || this.length);
this.length = from < 0 ? this.length + from : from;
return this.push.apply(this, rest);
};
这个函数扩展了JavaScript的内置对象Array,这样,我们以后的所有声明的数组都会自动的拥有remove能力,我们来看看这个方法的用法:
var array = ["one", "two", "three", "four", "five", "six"];
print(array);
array.remove(0);//删除第一个元素
print(array);
array.remove(-1);//删除倒数第一个元素
print(array);
array.remove(0,2);//删除数组中下标为0-2的元素(3个)
print(array);
也就是说,
remove接受两个参数,第一个参数为起始下标,第二个参数为结束下标,其中第二个参数可以忽略,这种情况下会删除指定下标的元素。
当然,不是每个人都希望影响整个原型链(原因在下一个小节里讨论),因此可以考虑另一种方式://Array Remove - By John Resig (MIT Licensed)
Array.remove = function(array, from, to) {
var rest = array.slice((to || from) + 1 || array.length);
array.length = from < 0 ? array.length + from : from;
return array.push.apply(array, rest);
};
其操作方式与前者并无二致,但是不影响全局对象,代价是你需要显式的传递需要操作的数组作为第一个参数:var array = ["one", "two", "three", "four", "five", "six"];
Array.remove(array, 0, 2);//删除0, 1, 2三个元素
print(array);
这种方式,相当于给JavaScript内置的Array添加了一个静态方法。
遍历数组
在对象与JSON这一章中,我们讨论了for…in这种遍历对象的方式,这种方式同样适用于数组,比如:
var array = [1, 2, 3, 4];
for(var item in array){
print(array[item]);
}
输出1 2 3 4
但是这种方式并不总是有效,比如我们扩展了内置对象Array,????????如下:
Array.prototype.useless = function(){}
执行结果:
1
2
3
4
function(){}
设想这样一种情况,如果你对数组的遍历做sum操作,那么会得到一个莫名其妙的错误,毕竟函数对象不能做求和操作。幸运的是,我们可以用另一种遍历方式来取得正确的结果:for(var i = 0, len = array.length; i < len;i++){
print(array[i]);
}
这种for循环如其他很多语言中的写法一致,重要的是,它不会访问哪些下标不是数字的元素,如上例中的function,这个function的下标为useless,是一个字符串。从这个例子我们可以看出,除非必要,尽量不要对全局对象进行扩展,因为对全局对象的扩展会造成所有继承链上都带上“烙印”,而有时候这些烙印会成为滋生bug的温床。
分享到:
相关推荐
Javascript 数组及其操作 Javascript 数组是一种基本的数据结构,用于存储和操作多个值。数组是一种复杂的数据类型,可以存储不同的数据类型,如数字、字符串、对象等。 创建数组 在 Javascript 中,可以使用三种...
JavaScript数组(源代码)JavaScript数组(源代码)JavaScript数组(源代码)JavaScript数组(源代码)JavaScript数组(源代码)JavaScript数组(源代码)JavaScript数组(源代码)JavaScript数组(源代码)...
第6节 JavaScript数组及应用.rar第6节 JavaScript数组及应用.rar第6节 JavaScript数组及应用.rar第6节 JavaScript数组及应用.rar第6节 JavaScript数组及应用.rar第6节 JavaScript数组及应用.rar第6节 JavaScript数组...
### JavaScript 数组增加和删除方法详解 在JavaScript中,数组是一...这些方法不仅增强了JavaScript数组的功能,还提高了代码的可读性和维护性。在实际开发中,根据具体需求选择合适的方法可以使程序更加高效、简洁。
第11节 JavaScript数组常用方法及应用.rar第11节 JavaScript数组常用方法及应用.rar第11节 JavaScript数组常用方法及应用.rar第11节 JavaScript数组常用方法及应用.rar第11节 JavaScript数组常用方法及应用.rar第11...
资源名称:Javascript数组及其操作 WORD版内容简介:本文档主要讲述的是Javascript数组及其操作;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看 资源太大,传百度网盘了,链接在附件中,有...
"JavaScript数组用法详解" JavaScript 数组是一种非常重要的数据结构,它是一种可以存储多个元素的集合。 JavaScript 数组的元素可以是任何类型,包括数字、字符串、对象、函数等。数组的长度可以动态地变化,可以...
于是,本人使用JavaScript的数组模拟Hashtable集合,说明JavaScript数组的特别之外。 环境:Windows XP Professional, IE 6.0 阅读对象:所有学习JavaScript的学员。 注:本示例代码注释非常详细,请仔细阅读体会...
JavaScript数组去重功能的设计与实现 本文主要讨论了JavaScript数组去重功能的设计与实现,以解决在数据处理过程中产生大量重复数据的问题。文章首先介绍了JavaScript的基本概念,包括ECMAScript、DOM、BOM三个部分...
JavaScript数组是该语言中一种用于存储有序集合的数据结构,它的操作和特性非常丰富,为开发者处理数据集合提供了极大的便利。本文将深入探讨JavaScript数组的特性以及在实际编程中的应用。 首先,数组字面量是定义...
Chrome V8引擎中的JavaScript数组实现分析与性能优化 在本文中,我们将对Chrome V8引擎中的JavaScript数组实现进行深入分析,并探讨如何通过优化JavaScript数组的使用方式来提高程序效率。在实际应用中,JavaScript...
由于提供的文件内容中包含大量的乱码和无法识别的字符,无法直接从中提取有关JavaScript数组的知识点。不过,我们可以根据文件标题“JavaScript数组.pdf”提供的信息,详细解释JavaScript数组相关的知识点。下面将对...
### JavaScript 数组常见方法详解 #### 一、前言 JavaScript 中的数组是一种非常重要的数据结构,用于存储一系列有序的数据。本文将详细介绍 JavaScript 数组的一些常用方法及其应用场景,帮助开发者更好地理解和...
本资料"Javascript数组操作整理"聚焦于JavaScript中的数组操作,旨在帮助开发者更好地理解和掌握相关知识。 1. 创建数组: JavaScript提供了多种创建数组的方式,如字面量语法`var arr = [元素1, 元素2, ...]`,或...
JavaScript数组操作函数是编程中非常基础且重要的部分,它们提供了对数组进行各种操作的方法,包括添加、删除、合并以及转换等。以下是对标题和描述中提及的数组操作函数的详细说明: 1. **push()**: `push()` 函数...
JavaScript数组是JavaScript中的基本数据结构之一,它提供了一系列的内置方法,可以用来处理和操作数组内容。接下来,我会详细解释几个关键的JavaScript数组方法,包括map、filter、reduce以及展开操作符,并通过...
本篇文章将深入探讨JavaScript数组的内存释放机制,以及如何有效地管理数组内存。 首先,理解JavaScript的内存管理机制至关重要。JavaScript使用了一种称为垃圾回收(Garbage Collection, GC)的自动内存管理系统,...
首先,创建JavaScript数组有两种主要方式:数组构造函数和数组字面量。例如: ```javascript var arr = new Array(20); // 创建一个长度为20的数组,但不包含任何元素 var arr1 = ["小伞", 1, true, undefined, [2, ...
Javascript 数组方法汇总整理
个人多年前学习笔记,Javascript数组,初学者可以看看,高手就不用看了