- JavaScript的数组没有类型的,元素可以使任意类型
- JavaScript的数组是动态的,会自动增城或缩减,创建数组时无需声明大小
- JavaScript的数组是稀疏的,元素的索引不一定是连续的
- JavaScript的数组都有length属性,数组继承自
- 使用数组直接量创建数组
var empty = []; // 空数组
var primes = [1.1, true, "a",];// 不同类型的元素和结尾的逗号
var base = 1024;
var table = [base, base+1];// 数组元素可以是任意表达式
var b = [[1, {x:1, y:2}], [2, {x:3, y:4}]]; // 可以包含其他数组直接量
var count = [1,,3]; // 三个元素,中间的为undefined
var undefs = [,,]; //两个元素,数组直接量运行有可选的结尾逗号,所以只要两个元素不是三个
- 调用构造函数Array()创建数组
var a = new Array();// 调用时不带参数
var b = new Array(10); // 指定数组大小
var c = new Array(5, 2, "testing"); // 创建带有元素的数组
- 使用“[]”操作符来访问数组中的元素
var a = ["world"];
var value = a[0];
a[1] = 3.14;
i = 2;
a[i] = 3;
a[i+1] = "hello";
a[a[i]] = a[0];
- 数组时对象的特殊形式,JavaScript将指定的数字索引值转换成字符串,1变成”1”,然后将其当做属性名来使用
o = {}; // 创建一个普通对象
o[1] = "one"; // 使用一个整数来索引,创建了一个名为"1"的属性
console.log(o); // => Object {1: "one"}
- 区分
数组索引
和对象属性名
:- 所有的索引都是属性名,但只有在0-2的32次方-2直接的整数属性名才是索引
- 所有的数组都是对象,可以为其创建任意名字的属性
- 如果使用的属性是数组的索引,数组的特殊行为就是讲根据需要更新length的属性值
- 可以使用负数或非整数来索引数组,此时数值就会转换为字符串,作为属性名来使用
- 名字是非负整数,就只能是常规的对象属性,而不是数组的所有
var a = ["world"];
a[-1.23] = true; // 创建一个名为"-1.23"的属性
a[10] = 0; // 数组的第11个元素
a[1.000] = 9; // 和a[1]等价
console.log(a); // => ["world", 9, 10: 0, -1.23: true]
(略。。。)
(略。。。)
a = []; // 定义一个空数组
a[0] = "zero";// 添加元素
- 使用
push()
方法在数组末尾添加元素
a = [];
a.push("zero");
a.push("one", "two");
使用
unshift()
方法在数组的头部插入元素,其他元素一次后移删除元素:可以使用
delete
方法删除元素
a = [1, 2, 3];
delete a[1]; // 删除数组中的第一个元素
- 使用
for
循环遍历数组
JavaScript
中不支持正真的多维数组,但可以使用数组的数组来表示
- Array.join()方法将素组中的所有元素转换为字符串并连接起来,返回最后生成的字符串
- 可以指定可选的字符串作为字符串的分隔符,否则使用逗号
var a [1,2,3];
a.join(); // => "1,2,3"
a.join(" "); // => "1 2 3"
a.join("-"); // => "1-2-3"
- Array.reverse()方法将数组中元素颠倒顺序,返回逆序的数组
var a = ["a", "b", "c"];
a.reverse().join(); // => "3,2,1"
- Array.sort()方法将数组中的元素排序,返回排序后的数组
var a = new Array("banana", "cherry", "apple");
a.sort(); // 默认按字母表顺序
- 按照指定的顺序排序
var a = [2, 3, 1, 9, 4];
a.sort(function(a,b){
return a-b;
})
- Array.concat()方法创建并返回一个新的数组,包含原始数组元素和concat的所有参数
var a = [1, 2, 3];
a.concat(4, 5); // [1,2,3,4,5]
a.concat([4,5]); // [1,2,3,4,5]
a.concat(4, [5,[6,7]]); // [1,2,3,4,5,[6,7]]
- forEach();
- map();
- filter();
- every()和some()
- reduce()和reduceRight()
- indexOf()和lastIndexOf();
ECMAScript 5中可以使用
Array.isArray()
函数来一个对象是否是数组
Array.isArray([]); // 返回true
Array.isArray({}); // 返回false
JavaScript数组的一些特性是其他对象没有的
- 添加元素时length会自动增加
- 设置length为一个较小的值将截断数组
- 从Array.prototype中继承一些方法
- 其类属性为“Array”
类数组
把拥有一个数字length属性和对应非负整数属性的对象看做一种类型的数组
// 为一个常规的对象增加一些属性使其变为类数组对象,然后遍历类数组元素
var a = {};
var i = 0; // 添加属性,成为类数组
while(i<10) {
a[i] = i*i;
i++;
}
a.length = i;
// 遍历数组
var total = 0;
for(var j=0; j
(略。。。)