数组是值得有序集合。每个值叫做元素,每个元素在数组中都有数字位置编号,也就是索引。js中的数组是弱类型的,数组中可以含有不同类型的元素。数组元素甚至可以是对象或其他数组。
var arr = [1,true,null,undefined,{x:1},[1,2,3]];
arr[4].x //返回1
arr[5][1]; //返回2
arr.length;获取数组长度
delete arr[0]//只是吧第一个元素改成了undefined,长度依然是原来的长度
创建数组-字面量
创建数组-new Array
for in 的方式遍历数组,数组也是对象,有原型arr.prototype,给arr.prototype增加一个属性x,在for in时X也会出现,吧原型链上的属性过滤掉,用到了hasOwnProperty;
for in 是不保存顺序的。
二维数组:
稀疏数组:
数组方法:
Array.prototype.forEach数组遍历
Array.prototype.map数组映射
Array.prototype.index & lastIndexOf 数组检索,元素在数组中的位置
Array.isArray判断是否是数组
其他方法:
[] instanceof Array;
({}).toString.apply([]) === '[object Array]';
[].contructor === Array;//true
总结:
数组 vs 一般对象
相同:都可以继承,数组是对象,对象不一定是数组,都可以当做对象添加删除属性。
不同:数组自动更新length,按索引访问数组常常比访问一般对象属性明显迅速。数组对象继承Array.prototype上的大量数组操作方法。
字符串和数组
var str = "hello world";
str.charAt(0);//"h"
str[1];//e
Array.prototype.join.call(str,"_");//"h_e_l_l_o__w_w_r_l_d"