数组是按次序排列的一组值,可定义时赋值也可以定以后赋值,值可以是任何类型,如果值为数组就形成多维数组。
基本概念
- typeof [] //"object"
- 数组的键名也是字符串,用数字读取时JS会自动将数字转化为字符 串。由于[]是运算符,可以接受数值读取键名。
var arr = ['a', 'b', 'c']; arr['0'] // 'a' arr[0] // 'a'
- 只有是数组就有length属性,为数组键名最大值+1,JS数组length最大值为2*32-1。length值是可写的
var arr = [ 'a', 'b', 'c' ]; arr.length // 3 arr.length = 2; arr // ["a", "b"] 清空数组 arr.length = 0; arr //[]
- 非整数键名自动添加到数组的末尾(待考证),也可认为添加空位,值为undefined,length值不变
var a = ['a']; a.length = 3; a[1] // undefined
- in运算符,返回布尔值
var arr = [ ,'a', 'b', 'c' ]; 2 in arr // true '2' in arr // true 4 in arr // false 空位也返回false
数组的遍历
- for...in...,遍历所有键包括整数键和非整数键名,不推荐
var a = [1, 2, 3]; a.foo = true; for (var key in a) { console.log(key); } // 0 // 1 // 2 // foo
- for循环,所有数组的问题都可以在for循环基础上解决,可以使用关键字break停止,forEach不能停止
- while循环
- for...in...,遍历所有键包括整数键和非整数键名,不推荐
数组的空位(hole)即某个位置没有值,不影响length属性。
- delete命令也适合对象使用,形成空位。
- 读取空位返回undefined和某个位置的值为undefined是不一样的概念,遍历时空位会被跳过。
伪数组:不具有数组的特有方法的数组
- 典型的伪数组:字符串,arguments对象,DOM元素集合等。
- 伪数组转化为真正的数组
- slice()
let x = 'iainadengoegne' Array.prototype.slice.call(x)//["i", "a", "i", "n", "a", "d", "e", "n", "g", "o", "e", "g", "n", "e"] x[0]//"i"
- ES6新增Array.from()
- slice()