数组是值的有序集合。每个值叫做一个元素,而每个元素的数组中有一个位置,以数字表示,称为索引
创建数组
使用数组直接量创建
|
|
调用构造函数创建
若在调用构造函数时没有传入参数,如下面代码所示:
该方法创建一个没有任何元素的空数组,等同于数组直接量[]。若在调用时传入一个数值参数,则该参数指定了数组的长度。如下面代码所示:
这种方式创建的数组没有存储值,甚至数组的索引属性“0”,“1”等还未定义。
数组元素的读和写
数组的索引和对象的属性名是有所区别的,所以只有0-232-2之间的整数属性名才是索引,但由于所有数组都是对象,可以为数组创建任意名字的属性。但如果使用的属性是数组的索引,数组的特殊行为就是将根据需要更新它们的length属性值
稀疏数组
稀疏数组就是包含0开始的不连续索引的数组,稀疏数组的length属性值大于元素的个数
当在数组直接量中省略值不会创建稀疏数组,省略的元素咋数组中是存在的,其值为undefined,这和数组元素根本不存在是有一些微妙的区别的
数组长度
数组的长度保证大于它每个元素的索引值,为了维持这个规则数组由两个特殊行为
- 如果为一个数组元素赋值时,如果他的索引值i大于或等于现有的数组长度时,length属性的值将设置为i+1
- 当设置length属性为一个小鱼当前长度的非负整数n时,当前数组中那些索引值大于或正与n的元素将从中删除
数组元素的添加和删除
为新索引赋值
|
|
push()和pop()
使用push()方法在数组的末尾增加一个或多个元素
|
|
使用pop()方法在数组的末尾取出一个元素
|
|
shift()和unshift()
使用shift()从数组头部删除一个元素
|
|
使用unshift()从数组头部增加一个元素
|
|
数组遍历
for循环
|
|
foreach()方法
|
|
ECMAScript 5中的数组方法
大多数es5中的数组方法的第一个参数是一个函数,第二个参数是可选的,如果有第二个参数,则调用的函数被看做是第二个参数的方法。也就是说,在调用函数时传递进去的第二个参数作为它的this关键字的值来使用
foreach()方法
foreach()方法从头至尾遍历数组
map()方法
map()方法将调用的数组的每个元素传递给指定的函数,并返回一个数组,它包含该函数的返回值
filter()
filter()方法返回数组元素是调用的数组的一个子集。传递的函数是用来逻辑判定的:该函数返回true或false。调用判定函数就像调用foreach()和map()一样,如果返回值为true或者能转换成true的值,它将被添加到一个作为返回值的数组中
every()和some()
every()和some()方法是数组的逻辑判定,他们对数组元素应用指定的函数进行判定,返回true或false
every()方法当前晋档针对数组中的所有元素调用判定函数都返回true,他才会返回true
some()方法当数组中至少有一个元素调用判定函数返回ture,他就返回true,当且晋档数组中所有元素调用判定函数都返回false,它才返回false
reduce()和reduceRight()
reduce()和reduceRight()方法使用指定函数将数组元素进行组合,生成单个值.
这在函数式编程中是常见的操作,也可以成为注入和折叠
reduceRight()的工作原理和reduce()一样,不同的是它按照数组索引从高到低(从右到左)处理数组
类数组对象
JavaScript数组的有一些特性是其他对象所没有的
- 当有新的元素天剑到列表中时,自动更新length属性
- 设置length为一个较小值将截断数组
- 从Array.prototype中继承一些有用的方法
- 其类属性为”Array”
这些特性让JavaScript数组和常规的对象有明显的区别。但是它们不是定义数组的本质特性。我们把拥有一个数值length属性和对应非负整数属性的对象看做一种类型数组