CodeAshen's blog CodeAshen's blog
首页
  • Spring Framework

    • 《剖析Spring5核心原理》
    • 《Spring源码轻松学》
  • Spring Boot

    • Spring Boot 2.0深度实践
  • Spring Cloud

    • Spring Cloud
    • Spring Cloud Alibaba
  • RabbitMQ
  • RocketMQ
  • Kafka
  • MySQL8.0详解
  • Redis从入门到高可用
  • Elastic Stack
  • 操作系统
  • 计算机网络
  • 数据结构与算法
  • 云原生
  • Devops
  • 前端
  • 实用工具
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
  • Reference
GitHub (opens new window)

CodeAshen

后端界的小学生
首页
  • Spring Framework

    • 《剖析Spring5核心原理》
    • 《Spring源码轻松学》
  • Spring Boot

    • Spring Boot 2.0深度实践
  • Spring Cloud

    • Spring Cloud
    • Spring Cloud Alibaba
  • RabbitMQ
  • RocketMQ
  • Kafka
  • MySQL8.0详解
  • Redis从入门到高可用
  • Elastic Stack
  • 操作系统
  • 计算机网络
  • 数据结构与算法
  • 云原生
  • Devops
  • 前端
  • 实用工具
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
  • Reference
GitHub (opens new window)
  • CSS3浮动定位与背景样式

  • CSS动画

  • JS基础语法与表达式

  • 流程控制语句与数组

    • 01-流程控制语句
    • 02-数组
      • 数组简介和定义
        • 定义数组
        • 角标越界和更改数组项
      • 数组类型的检测
      • 数组的头尾操作
      • 元素的替换、插入、删除
      • 获取子数组
      • 数组字符串互转
      • 数组合并
      • 数组反转
      • indexOf()、includes()、sort
      • 什么是引用类型
      • 深克隆和浅克隆
  • JS函数与DOM

  • 面向对象

  • 正则表达式

  • ES6基础入门

  • ES6语法扩展

  • Promise与Class

  • Module与Babel

  • 前端
  • 流程控制语句与数组
CodeAshen
2023-02-10
目录

02-数组

# 数组的定义和使用

# 数组简介和定义

数组(Array),顾名思义,用来存储一组相关的值,从而方便进行求和、计算平均数、逐项遍历等操作。

# 定义数组

有三种方式定义数组。

// 方括号定义
var arr1 = ['A', 'B', 'C'];

// Array 构造,传入数组项
var arr2 = new Array('A', 'B', 'C');

// Array 构造,传入数组长度,所有项都是 undefined
var arr3 = new Array(3);
1
2
3
4
5
6
7
8

数组长度,使用 length 属性获取,arr.length。

# 角标越界和更改数组项

JavaScript 规定,访问数组中不存在的项会返回 undefined,不会报错。

如果更改的数组项超过了 length - 1,则会创造这项,自动扩容,前面的填充 undefined。

image-20220719013430505

# 数组类型的检测

  • 数组用 typeof 检测结果是 object
  • Array.isArray() 方法可以用来检测数组
  • 后续还会介绍“鸭式辨型”检测方法

# 数组的常用方法

# 数组的头尾操作

image-20220719014016607

  • push:在数组未尾推入新项,参数就是要推入的项,如果要推入多项,可以用逗号隔
  • pop :删除并返回数组中的最后一项
  • unshift:在数组头部插入新项,参数就是要插入的项,如果要插入多项,可以用逗号隔开
  • shift:删除并返回数组中的首项

# 元素的替换、插入、删除

splice() 方法格式:splice(num1, num2, n...m),表示从 num1 项开始,删除 num2 个元素,再插入 n...m 个元素。

splice() 方法会以数组的形式返回被删除的元素,没有删除则返回空数组。

注意:这里删除元素的个数和插入的个数不要求相等。

根据 splice() 方法的特点,可以用来替换、插入、删除元素。

splice() 用于元素的替换。

这里将 D、E 替换成了 X、Y、Z。

image-20220719014948130

以上图为例,可以理解为,从 3 位置开始,删除 2 项,然后将后面的元素插入。

splice() 用来插入元素

image-20220719015511649

上图表示,从 2 位置开始,删除 0 项,再插入后面的元素。

splice() 用于删除元素

image-20220719015914588

从 2 位置开始,删除 4 项,不插入元素。

# 获取子数组

  • slice() 方法用于得到子数组,类似于字符串的 slice() 方法
  • slice(a, b) 截取的子数组从下标为 a 的项开始,到下标为 b(不包括)结束
  • slice(a, b) 方法不会更改原有数组
  • slice() 如果不提供第二个参数,则表示从指定项开始,提取所有后续所有项作为子数组
  • slice() 方法的参数允许为负数,表示数组的倒数第几项

# 数组字符串互转

join() 和 split() 方法

image-20220719021303478

  • 数组的 join() 方法可以使数组转为字符串;字符串的 split() 方法可以使字符串转为数组。
  • join() 的参数表示以什么字符作为连接符,如果留空则默,认以逗号分隔,如同调用 toString() 方法
  • split() 的参数表示以什么字符拆分字符串,一般不能留空
'a-b-c-d'.split('-')  // ["a", "b", "c", "d"]
'abcd'.split()        // ["abcd"]
'abcd'.split('')      // ["a", "b", "c", "d"]
1
2
3

# 数组合并

  • concat() 方法可以合并连结多个数组
  • concat() 方法不会改变原数组

下例中 arr1 不会改变。

image-20220719022018584

# 数组反转

reverse() 方法用来将一个数组中的全部项顺序置反

image-20220719022120441

# indexOf()、includes()、sort

  • indexof() 方法的功能是搜索数组中的元素,并返回它所在的位置,如果元素不存在,则返回 -1
  • includes() 方法的功能是判断一个数组是否包含一个指定的值,返回布尔值
  • sort() 方法用于数组元素排序

# 引用类型

# 什么是引用类型

  • 基本类型:number、boolean、string、undefined、null

  • 引用类型:array、object、function、regexp...

  • 基本类型进行相等判断时,会比较值是否相等

  • 引用类型进行相等判断时,会比较址是否相等,也就是说它会比较是否为内存中的同一个东西

image-20220719023432087

# 深克隆和浅克隆

  • 使用 arr1=arr2 的语法不会克隆数组
  • 浅克隆:只克隆数组的第一层,如果是多维数组,或者数组中的项是其他引用类型值,则不克隆其他层
  • 深克隆:克隆数组的所有层,要使用递归技术
编辑 (opens new window)
上次更新: 2023/06/04, 12:34:19
01-流程控制语句
01-函数与闭包

← 01-流程控制语句 01-函数与闭包→

最近更新
01
第01章-RabbitMQ导学
02-10
02
第02章-入门RabbitMQ核心概念
02-10
03
第03章-RabbitMQ高级特性
02-10
更多文章>
Theme by Vdoing | Copyright © 2020-2023 CodeAshen | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式