一、JavaScript 数组的概念


数组的概念

  - 程序 = 数组 + 算法

  - 所谓数据结构,就是把数据与数据间的关系按照特定的结构来保存。设计合理的数据结构是解决问题的前提

  - 数组(Array),就是一种很常用的保存批量数据的数据结构。

wKiom1b32rGSPYyaAAA1uMrzSNg740.png

  - 多个元素组成的集合--在一个变量中存储多个值

  - JS数组中元素的数据类型可以相同,也可以不同

  - 元素按线性顺序排列。所谓线性顺序指除第一个元素外,每一个元素都有唯一的前驱元素;除最后一个元素外,每一个元素都有唯一的后继元素("一个跟一个")

  - 可以通过元素所在位置的顺序号(下标)做标识来访问每一个元素(下标从0开始,最大到元素的个数-1)

wKiom1b32-eSh5AnAAAefmceWb4829.png



二、JavaScript 数组的定义和初始化


定义一维数组

  - 可以使用如下四种格式定义一个数组变量

wKiom1b33IvDU14DAAL6RhxtzZ8569.png


初始化数组

  - 数组中的元素可以在定义时初始化

wKioL1b33aTyX5v2AABudkkRKnA818.png

  - 可以先声明一个空数组,随后再向其中添加元素

wKioL1b33eKDj8_UAAEPOMjskvw930.png


数组是引用类型对象

  - 引用类型? 值不保存在变量本地的数据类型

wKiom1b33c6DirBmAAA0HcN54rI367.png

wKioL1b33p2hhFxyAAClvOn-wnk278.png  - 什么是对象?js中的对象,指内存中集中保存一组相关数据和功能的整体

  - 对象中保存了相关的数据和对数据的常用操作方法

  - 如何创建对象? 对象都是用new操作符创建的

  - 什么是new关键字? new专门用于在堆中动态开辟一块存储空间,然后返回存储空间的地址

  - 所以,使用new创建出的都是引用类型的对象

  - 数组赋值给变量时,其实赋值的是地址

wKiom1b34Nvz133kAABLQLWZEkU647.png  - 数组作为参数,也是按值传递,传递的是数组的地址

wKiom1b35KqjopBbAABmHCmPJzI740.png


null关键字

  - 什么是null?null专门表示一个变量不再指向任何对象地址

  - null与undefined:

      - 共同点:都是原始类型,保存在栈中变量本地

      - 不同点:

          - undefined: 表示变量声明过但未被赋过值。是所有未赋值变量的默认值。一般不主动使用

            例如: var a; // a 被自动赋值为undefined

  - null:表示一个变量将来可能指向一个对象,但目前暂时什么都没指向。一般用于主动释放指向对象的引用

    例如: var emps = ['Scott','Smith'];

          emps = null; //释放指向数组的引用


null与undefined

  - 例如:

wKiom1b35FDQBrXBAAE9dP22WcQ326.png


三、JavaScript 访问数组


访问数组元素

wKioL1b35fTD8YPeAAEjsi3WTQg863.png

wKiom1b35YDgDUrTAADspEackBI053.png


获取数组的长度

  - 使用length属性获取数组中元素的个数,即数组的长度

wKioL1b35oqQG-5OAAHzCx6dYg0015.png


遍历数组元素

  - 遍历数组元素,通常选择for循环语句,元素的下标作循环变量

wKiom1b35o6Dc0vtAAHmpa6NxNQ313.png


for...in 声明

  - for...in 遍历数组元素

wKioL1b36FujaNimAAF2-hcv3og036.png

  - 索引数组:以0,1,2...数字作下标

  - 关联数组:以一个字符串作下标

wKiom1b36KShtRj8AAG80jbw5Ws412.png



四、JavaScript 数组的常用方法


获取数组字符串

- toString()方法可以把数组转换为字符串,并返回结果

- join([]seperator)返回一个字符串,由每个元素转换而成的字符串使用指定的separator拼接而成


连接数组

- concat()拼接两个或更多的数组,并返回结果

    - 语法: arrObject.concat(arr1,arr2... arrn);

    - 该方法不会改变现有数组,仅仅返回一个拼接后的副本

    - 每个参数可以是一个值,也可以是一个数组

    - 可以接受任意多个参数

wKioL1b369iT3juBAAEAVNuSJXk637.png


获取子数组

- slice()返回现有数组的一个子数组

    - 语法: arrObject.slice(start,[end]);

    - 参数start指定从哪个下标处开始选取;若取值为负数,则表示从尾部开始算起,如-1指最后一个元素,-2指倒数第二个元素

    - 参数end指定结束处的下标(不包含);可以省略或取负值

wKiom1b37EbgqnV5AAEfHscChpE162.png


修改数组

- splice()从数组中删除一部分元素,并添加另一部分元素

    - 语法: arrObject.splice(start,count,e1,e2,...en);

    - 参数start:指定添加/删除的起始位置,可取负值

    - 参数count:要删除的元素个数;0表示不删除

    - e1,e2,...en:在start处新添加的项

    - 返回被删除的项目;现有数组内容会改变

wKioL1b37kHzOiHYAAEAKhR3hH0150.png


倒转数组

- reverse()颠倒数组中元素的顺序

    - 语法: arrObject.reverse();

    - 现有数组内容会改变

wKiom1b37fOSr83LAABcwDwY7fA232.png



进出栈操作

- push()入栈,在栈顶(数组尾部)添加指定的元素,并返回新的长度

wKioL1b4id7S_P8OAAA4oKTuL_I397.png

- pop()出栈,删除并返回栈顶(数组尾部)的元素

wKiom1b4iVOjA9V0AAA2iTgbYI4668.png

- 除了push()和pop()外,Array对象还专门提供了shift()和unshift()方法,专用于从数组头部增减元素

wKiom1b4jcnRfhROAABPbDbKO88795.png

wKioL1b4j7LD5QkxAABT4NiexVQ232.png



五、JavaScript 二维数组


二维数组的概念

- 二维数组: 从整体上来看,是一个数组,只是其中的每个元素又是一个数组,即数组的数组。例如:

wKioL1b4kZWDzusrAAATbQoGD0s302.png- 又如:

wKioL1b4kbOjAR4OAAAr_FH3_pI947.png


创建二维数组

- 定义一个规整的二维数组

wKiom1b4kn2y0uegAAANbY9pdq0012.png

- 定义一个不规整的二维数组

wKiom1b4kpnwjWi2AAArrMlGyAE477.png

- 定义一个形如"表格"的二维数组

wKioL1b4k0yiI_FYAABSMWm4DLE248.png


使用二维数组

- 访问二维数组中的某个元素

wKiom1b4k5rBMSDIAAA901Lnk4M853.png

- 遍历二维数组中的每个元素---循环的嵌套

wKiom1b4k63Q1v4ZAABRynCrn6A063.png


总结:本章内容主要介绍了 JavaScript 数组(创建、访问、常用方法、二维数组)