Js学习(3) 数组

数组本质:

本质上数组是特殊的对象,因此,数组中可以放入任何类型的数据,对象,数组,函数都行

它的特殊性在于键名是按次序排列好的整数 从0开始,是固定的,不用指定键名

如果数组中的元素仍是数组,则为多维数组

数组可以先定义后赋值,也可以声明时即赋值

var arr = [];

arr[0] = 'a';
arr[1] = 'b';
arr[2] = 'c';

var arr = [
  {a: 1},
  [1, 2, 3],
  function() {return true;}
];

arr[0] // Object {a: 1}
arr[1] // [1, 2, 3]
arr[2] // function (){return true;}

length属性 

返回数组的成员数量,可通过调整length控制数组的大小

Js中的数组是动态的可随时增删,length总是键名中的最大整数加1

由于数组本质上是一种对象,所以可以为数组添加属性,但不影响length的值

var a = [];

a['p'] = 'abc';
a.length // 0

a[2.1] = 'abc';
a.length // 0

如果数组的键名数值超出范围,该键名会自动转换为字符串

数组的遍历

可以用for...in

不过会遍历到非整数键名

因此用for,while或forEach

数组的空位

当数组的某个位置是空元素,即两个逗号之间没有任何值,称数组存在空位,空位不影响length属性

数组的空位是可以读取的,返回undefined

使用delete命令删除一个数组成员,会形成空位,且不会影响length属性

var a = [1, 2, 3];
delete a[1];

a[1] // undefined
a.length // 3

然而空位与一开始定义为undefined是不一样的

使用数组的forEach,for...in,Object.keys方法进行遍历,空位会被跳过,undefined不会  

类似数组的对象

如果一个对象的所有键名都是正整数或零,并且有length属性,那么语法上称“类似数组的对象”

array like object

根本特征在于有length属性,但不是动态的

典型的类似数组的对象是函数的arguments对象,以及大多数DOM元素集,还有字符串

// arguments对象
function args() { return arguments }
var arrayLike = args('a', 'b');

arrayLike[0] // 'a'
arrayLike.length // 2
arrayLike instanceof Array // false

// DOM元素集
var elts = document.getElementsByTagName('h3');
elts.length // 3
elts instanceof Array // false

// 字符串
'abc'[1] // 'b'
'abc'.length // 3
'abc' instanceof Array // false

可以通过某些方法把类似数组的对象变成真正的数组

1.数组的slice方法

var arr = Array.prototype.slice.call(arrayLike);

2.通过call()把数组的方法放到对象上面 

原文地址:https://www.cnblogs.com/wtblogwt/p/10016390.html