注意:
js当中的数组是无类型的,同一个数组可以是不同的类型,索引大小是32位数(2^32 -2)。 同时他是动态的,会自己调整长度大小。
继承:
Array.prototype.
创建数组:
var empty = [];
var primes = [1,2,3,4];
var misx = [1,1,true,"a"];
----------
直接量可以是常量:
var base = 1024;
var table = [base+2,base+1];
----------
可以包含对象直接量或者数组直接量:
var b = [[1,{x:1,y:2}],[2,{x:1,y:2}]];
----------
省略的情况下:
var count = [1,,3]; // 结果是 1,undefined,3
var undef = [,,]; // 结果是[ <2 empty items> ] 两个都是undefined
----------
其他:
var a = new Array(); // equals to var a = [];
????var a = new Array(10); //指定长度,但是还没有存储值 数组索引属性 0,1 也没有定义
var a = new Array(5,4,3,1,"test"); // 使用起来更加简单
数组元素的读和写:
读写:
var a = ["world"];
var value = a[0];
a[1] = 3.14;
i = 2;
a[i] = 2;
a[i+1] = 3;
a[a[i]] = a[0];
数组是特殊的对象形式:
o = {}; // 普通对象
a[1] = "one" // 用一个整数来索引
a["one"] = 2;
console.log(a["one"]); // 2 equals to a.one
当索引是负数 或者大于其所有的属性的时候,就会变成数组的属性维护。
a[-2] = 2; // equals to a["-2"];
so 在js中我们可以知道不存在越界的错误概念。
稀疏数组:
包含从0开始的不连续索引的数组。 如果数组是稀疏的那么 array.length 大于元素的个数。
a = new Array(5); // 没有元素,length = 5;
a = []; // 空数组,length=0;
a[1000] = 0; // 一个元素 length = 1001;
注: 可以使用delete操作符来生产稀疏数组。
注: 数组直接量中省略值时不会创建稀疏数组,省略的值时undefined。
注: 足够稀疏的数组通常在实现上比稠密的数组更加慢、内存使用率更高。在这样的数组中查找元素 的时间与常规的数组属性的查找时间是一样长的。
0 in a1 // true : 索引0处有一个元素
0 in a2 // false : 索引0处没有元素
数组的长度(length属性):
数组的长度是索引i+1; // 动态
删除 (只留下指定长度)
a = [1,2,3,4,5]; // 5
a.length = 3 ; // [1,2,3]
a.length = 0; // []
a.length = 5 // 5 []
------------
ECMAScript5 中可以使用Object.defineProperty() 让数组的length属性变成只读。
a = [1,2,3]; //
Object.defineProperty(a,"length",writable:false); // length属性只读
a.length = 0; // a 不变
其他方法:(OBject.seal() Object.freeze())
数组元素的添加和删除:
索引:
a =[];
a[0] = "zero";
a[1] = "one";
push() 向末尾存放方法:
a = [];
a.push("zero"); // a = ["zero"]
a.push("one","two"); // a = ["zero","one","two"]
delete来删除元素
var a = [1,2,3,4,5];
delete a[1]; // 变成稀疏函数
1 in a // false index 1 没有定义
a.length // 5 , delete 不影响数组的长度
数组的遍历:
method1:
var o = {
x:1,
y:2,
}
var keys = Object.keys(o);
var values = [];
for(var i = 0;i <keys.length; i++){
var key = keys[i];
values[i] = o[key];
console.log(key +"="+values[i]);
}
跳过一次循环
continue
method2:
for( var index in o){
console.log(o[index]); // 1 2
}
ECMAScript5:
var data = [1,2,3,4,5];
var sumOfSquares = 0;
data.forEach(function(x){
sumOfSquares += x*x; // 平方相加
});
console.log(sumOfSquares); // 55
多维数组:
// 创建一个多维数组
var table = new Array(10);
for(var i = 0; i<table.length; i++){
table[i] = new Array(10);
}
// 初始化数组
for(var row = 0; row <table.length; row++) {
for(col = 0; col <table[row].length; col++){
table[row][col] = row * col;
}
}
var product = table[5][7]; // 35