1.定义
每一个值叫做元素
// 元素指的是1、2
let arr = [1, 2]
元素在数组中的位置叫做索引
第一个元素的索引为0
// '菁菁'的索引为0, '小小'的索引为1
let arr2 = ['菁菁', '小小']
数组是无类型的
数组元素可以是任意类型
let fun = function (a,b) { return a + b}
let arr = ['小小',1, fun,true,{name: '小小'},['苹果','梨子']]
console.log(typeof arr[0]) // string 字符串
console.log(typeof arr[1]) // number 数字
console.log(typeof arr[2]) // function 方法
console.log(typeof arr[3]) // boolean 布尔值
console.log(typeof arr[4]) // object 对象
console.log(typeof arr[5]) // object 对象
数组是动态的
根据需要它们会增长或缩减
无须声明固定大小
改变时无须重新分配空间
let arr = []
console.log(arr.length) // 0 数组长度
arr[0] = 'LOL'
arr[1] = 'QQ'
console.log(arr.length) // 2 数组长度
arr.shift() // 删除数组的第一个元素
console.log(arr.length) // 1 数组长度
稀疏数组
数组元素的索引可以有空隙
let arr = []
arr[1] = '精灵'
arr[10] = '妖精'
console.log(arr.length) // 11
console.log(arr) // [1: "精灵", 10: "妖精"]
稀疏数组的长度大于所有元素的索引
非稀疏数组(密集数组)的长度等于数组元素的个数
let arr = []
arr[0] = '精灵'
arr[10] = '妖精'
console.log(arr.length) // 11 长度大于所有元素的索引
let arr1 = []
arr1[0] = '101女团'
arr1[1] = '王思聪'
arr1[2] = 'IG'
console.log(arr1.length) // 3 长度等于数组元素的个数
数组是对象的特殊形式
数组索引是整数的属性名和常规对象的属性名是字符串类似
使用数字索引访问元素比常规的对象属性要快很多
let arr = []
let obj = {}
console.log(typeof arr) // object 对象类型
console.log(typeof obj) // object 对象类型
arr[0] = '小小'
obj.name = '笨笨'
// arr[0]的访问时间比obj.name的访问时间快
QJ: 大家讨论一下
PS: 如何检测通过数组索引访问的时间
PS: 如何检测通过对象属性访问的时间
数组继承自Array.prototype中的属性 (7.8节)
它定义了数组的操作方法(7.9节)
数组方法对“类数组对象”同样有效(7.11节)
字符串的行为与字符数组类似(7.12节)