数组可以算是程序里面最常用的数据结构了,但凡网页上任何一个列表数据,基本都是以数组的形式存在,像表格、banner图、菜单列表、商品列表,分类列表等等,在前端领域都是以数组处理。

数组的定义

JS 的数组花样很多,不像其他强类型语言中的数组限制颇多。

数组中的元素

JS 数组中的元素可以是任何类型,包括对象、数组、函数、字符串、数字、布尔值等。而且可以在同一个数组中混合使用各种数据类型。

示例:

const arr1 = [
'前端路引', // 字符串
1, // 数字
true, // 布尔值
function() {}, // 函数
{ name: '前端路引' }, // 对象
[1, 2], // 数组
new Date(), // 日期对象
new RegExp(), // 正则对象
// ...还可以是其他各种对象
];

数组定义

除了使用字面量 [] 定义数组外,还可以使用构造函数 Array 定义数组,也可以使用数组提供的内置方法定义数组。

示例:

const arr1 = [1, 2, 3]; // 字面量定义数组
const arr2 = new Array(); // 空数组
const arr3 = new Array(1, 2, 3); // 包含元素
const arr5 = Array(1, 2, 3) // 与 new Array 一样,获取 [1, 2, 3]
const arr6 = new Array(5) // [空属性 × 5] 数组长度为 5
const arr7 = Array(5) // 与 new Array(5) 相同
const arr8 = Array.of(5) // [5] 数组长度为 1
// 将类数组或可迭代对象转为数组
const arr9 = Array.from('前端路引') // ['前', '端', '路', '引']
const arr10 = Array.from([1, 2, 3], (item) => item * 2) // [2, 4, 6]
const arr11 = Array.from({ length: 5 }, (item, index) => index)
const arr12 = Array.from(document.querySelectorAll('div'))
// 扩展运算符
const arr13 = [...arr5]; // 扩展运算符将会展开原数组,获得一个新的数组
// fill 方法
const arr14 = new Array(5).fill(1); // [1, 1, 1, 1, 1]

数组长度

数组的 length 属性表示数组长度,即一个数组中的元素个数,也可以通过 length 属性修改数组长度,如果长度不够,则自动使用 空属性 填充,如果设置的 length 小于原数组长度,则数组将会截断。

const arr1 = [1, 2, 3];
console.log(arr1.length); // 3
arr1.length = 5; // 自动使用空属性填充
console.log(arr1); // [1, 2, 3, 空属性 × 2]
arr1.length = 2; // 截断长度为2
console.log(arr1); // [1, 2]

数组取值

数组取值需要通过 下标(index) 来获取,所有数组下标都从 0 开始,如果下标越界,则会返回 undefined

const arr1 = ['前', '端', '路', '引'];
console.log(arr1[0]); // 前
console.log(arr1[4]); // undefined 数组最大下标为 length - 1
console.log(arr1[-1]); // undefined
const index = 2;
// 可以使用变量取值
console.log(arr1[index]); // 路 // 使用 at 方法取值
console.log(arr1.at(0)); // 前
console.log(arr1.at(4)); // 越界获取 undefined
// at 方法负数取值,从数组末尾开始取值倒数,-1 表示数组最后一个元素,-2 表示数组倒数第二个元素,以此类推。
console.log(arr1.at(-1)); // 引

空属性的取值将会获得 undefined

const arr1 = new Array(5); // [空属性 × 5]  数组长度为 5
console.log(arr1[0]); // undefined
console.log(arr1.at(0)); // undefined

写在最后

以上数组定义和取值基本涵盖了日常开发中最常用的几种方式,当然不是所有的定义方法都能穷举,比如一些歪路子定义数组:

const arr1 = eval(`['前', '端', '路', '引']`);
const arr2 = (new Function(`return ['前', '端', '路', '引']`))();

歪路子有很多,就不一一介绍了,掌握常用的定义方法即可!

Web前端入门第 60 问:JavaScript 各种数组定义与数组取值方法的更多相关文章

  1. web前端入坑第五篇:秒懂Vuejs、Angular、React原理和前端发展历史

    秒懂Vuejs.Angular.React原理和前端发展历史 2017-04-07 小北哥哥 前端你别闹 今天来说说 "前端发展历史和框架" 「前端程序发展的历史」 「 不学自知, ...

  2. Android零基础入门第60节:日历视图CalendarView和定时器Chronometer

    原文:Android零基础入门第60节:日历视图CalendarView和定时器Chronometer 上一期学习了AnalogClock.DigitalClock和TextClock时钟组件,本期继 ...

  3. web前端入坑第二篇:web前端到底怎么学?干货资料! 【转】

    http://blog.csdn.net/xllily_11/article/details/52145172 版权声明:本文为博主[小北]原创文章,如要转载请评论回复.个人前端公众号:前端你别闹,J ...

  4. web前端(13)—— 了解JavaScript,JavaScript的引入方式

    从本篇博文开始,将进入web前端方便最关键最重要的部分——javascript,学到后面你就知道它真的太重要了 什么是JavaScript JavaScript一种直译式的脚本语言,是一种动态类型.弱 ...

  5. WEB前端工程师整理的原生JavaScript经典百例

    一.原生JavaScript实现字符串长度截取 二.原生JavaScript获取域名主机 三.原生JavaScript转义html标签 四.原生JavaScript时间日期格式替换 Date.prot ...

  6. Web前端基础怎么学? JavaScript、html、css知识架构图

    以前开发者只要掌握 HTML.CSS.JavaScript 三驾马车就能胜任一份前端的工作了.而现在除了普通的编码以外,还要考虑如何性能优化,如何跨端.跨平台实现功能,尤其是 AI.5G 技术的来临, ...

  7. web前端学习之HTML CSS/javascript之一

    前端编码之路之坎坷,web前端应该一直是个战场吧,各种浏览器的不兼容,各种小细节的修改,要往一个好的产品经理方向走,实在是难,昨天听了一位十年经验的产品经理讲座,最重要的恐怕就是协调资源的能力,而协调 ...

  8. Web前端开发规范【HTML/JavaScript/CSS】

    前言 这是一份旨在增强团队的开发协作,提高代码质量和打造开发基石的编码风格规范,其中包含了 HTML, JavaScript 和 CSS/SCSS 这几个部分.我们知道,当一个团队开始指定并实行编码规 ...

  9. web前端——实例中学习css,javascript

    最近闲暇时候在研究前端的样式和js,以前都是从w3school上看看那些选择器和DOM操作方法很少去实际做demo来研究,做的过程当中才真切感觉到纸上得来终觉浅,看得懂跟能做出东西完全两码事,尤其在定 ...

  10. 文成小盆友python-num14 - web 前端基础 html ,css, JavaScript

    本部分主要内容 html - 基础 css - 基础 一.html 标签 html 文档标签树如下: head 部分 Meta(metadata information) 提供有关页面的元信息,例:页 ...

随机推荐

  1. excel 数字转中文大写金额

    1.在单元格中输入公式: =SUBSTITUTE(SUBSTITUTE(IF(-RMB(A1,2),TEXT(A1,";负")&TEXT(INT(ABS(A1)+0.5%) ...

  2. DeepSeek满血版测试

    技术背景 很多厂商以次充好,用蒸馏版DeepSeek冒充满血版.本文提供一些收集的问题集,可以用于测试是否满血DeepSeek.经过实际测试,国内厂商中只有满血版DeepSeek可以全对.但是各厂商后 ...

  3. 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了

    大家好!今天给大家带来一个好消息,Dapr(Distributed Application Runtime)1.15版本正式发布啦!对于不熟悉Dapr的朋友来说,Dapr是一个开源的.跨平台的运行时, ...

  4. 第二课 - 输入(按键)控制输出(LED)-设备树

    在第一课中学习了如何安装NCS开发环境,以及如何新建一个工程,还有如何构建和下载到开发板.并运行了官方的LED闪烁例程. 设备树 我们继续跟着官方开发者学院的教程来学习第二课的课程.官方课程包含了以下 ...

  5. Mermaid Live Editor 如何调整方向

    在 Mermaid Live Editor 中,默认情况下,流程图和序列图等都是按照从左到右的方向来布局的.但是,如果你想要创建一个从上到下(纵向)布局的图形,你可以使用 TD(Top-Down,即从 ...

  6. windows goland go exec "gcc": executable file not found in %PATH%

    问题 windows 本地缺少 gcc 编译器 解决方案 下载安装使用 MinGW-w64 第一种 https://winlibs.com/#download-release 下载后解压到磁盘中,然后 ...

  7. go 限流器 rate

    前言 Golang 官方提供的扩展库里就自带了限流算法的实现,即 golang.org/x/time/rate.该限流器也是基于 Token Bucket(令牌桶) 实现的. 限流器的内部结构 tim ...

  8. GitFlow ⼯作流

    前言 Git 是一个开源分布式版本控制系统,它可以很方便的帮我们记录文件的改动,就像下面一样: 我们可以很快的跳到文件改动的某一个版本(就像时空穿梭一样). Git 在程序开发中,作为一个源码管理系统 ...

  9. linux查看redis版本

    1. redis-server --version 和 redis-server -v 2.redis-cli --version 和 redis-cli -v 如果报redis-server或red ...

  10. Django实战项目-学习任务系统-配置定时调度任务

    接着上期代码内容,继续完善优化系统功能. 本次增加配置定时调度任务功能,学习任务系统定时任务管理添加的定时学习任务,需要通过配置调度任务,定时发布周期性的学习任务. 以及每天定时发送学生用户属性值,积 ...