数组可以算是程序里面最常用的数据结构了,但凡网页上任何一个列表数据,基本都是以数组的形式存在,像表格、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开发中,提供图片上传的预览功能以及获取图片的尺寸和大小信息,已成为提升用户体验的重要手段。本文将详细介绍如何使用JavaScript实现这些功能,帮助你在用户上传图片前进行有效的验证和优化。一、实现图..
JavaScript 默认是非严格模式的,可以通过 "use strict"; 启用严格模式。此声明语句可以放在 JS 文件顶部,也可以放在函数内部。启用严格模式1、外部脚本在 JS 文件开头声明,内部脚本在 <script> 标签开头声明,声..
任何一门编程语言,在学习之前都应该先弄清楚它的调试方法,毕竟没有不挖坑的人类!程序一旦出现问题,第一时间就是找到问题出在哪儿,其次才是拿出解决办法。如果都找不到问题原因,那又何从谈起解决办法呢?如何排..
JS 的代码并没有强制规定放在 HTML 中的某个位置,如果您有使用过开发者工具查看过网页源码,那么您会看到很多 JS 代码都以 .js 文件的形式存放,并且放在了 HTML 文件最后,也就是 </body> 结束标签之前。但如果仔..
截至目前,您应该对前端的 HTML + CSS 应该有了很清楚的认知,至少实现一个静态网页已经完全不在话下了。当然,CSS 功能绝不止这些,一些不太常用的 CSS 相关知识,后续将通过案例进行分享。那么咱们接下来看看 Java..
富文本编辑器在允许用户输入丰富内容的同时,也带来了跨站脚本攻击(XSS)的风险。过滤提交的 HTML 中的 <script> 脚本是防止跨站脚本攻击(XSS)的关键步骤。在 .NET C# 服务端过滤 <script> 脚本主要有以下几种方..
常见的10个问题#产品开发中常见的10个问题思维导图需求相关#1. 需求不明确#在日常工作中,需求来源于用户、老板、客户、竞品分析、业务部门、产品经理等,这些人或部门会提出需求,因为他们不是产品经理,提出的需求..
1. 定义微服务是一种架构风格,将应用程序拆分为多个小型、独立的服务,每个服务运行在自己的进程中,通过轻量级通信机制(如HTTP/REST)交互。每个服务围绕特定业务功能构建,可独立开发、部署和扩展。2. 特点独立..
JavaScript函数可以有默认参数值。通过默认函数参数,你可以初始化带有默认值的正式参数。如果不初始化具有某些值的参数,则该参数的默认值为undefined。请看下列代码:function foo(num1){console.log(num1);}foo()..
之前,笔者有分享过说我最喜欢的增长是可复制可持续的增长,它一般都会有三个关键过程:首先是小范围测试,低成本试错,也就是最小可行性验证,让ROI最大化。然后是把测试的最优结果整理为可执行的标准化化流程。前..
前言本篇博文来自一次公司内部的前端分享,从多个方面讨论了在设计接口时遵循的原则,总共包含了七个大块。系卤煮自己总结的一些经验和教训。本篇博文同时也参考了其他一些文章,相关地址会在后面贴出来。很难做到详..
JavaScript 中的数字按照 IEEE 754 的标准,使用 64 位双精度浮点型来表示。其中符号位 S,指数位 E,尾数位M分别占了 1,11,52 位,并且在ES5 规范中指出了指数位E的取值范围是[-1074, 971]。精度问题汇总想用有限..
继承是面向对象编程中又一非常重要的概念,JavaScript支持实现继承,不支持接口继承,实现继承主要依靠原型链来实现的。原型链首先得要明白什么是原型链,在一篇文章看懂proto和prototype的关系及区别中讲得非常详细..
基本概念事件委托,通俗地来讲,就是把一个元素响应事件(click、focus……)的函数委托到另一个元素;一般来讲,会把一个或者一组元素的事件委托到它的父层或者更外层元素上,真正绑定事件的是外层元素,当事件响应..
编程这么多年,要是每次写遍历代码时都用 for 循环,真心感觉对不起 JavaScript 语言~对象遍历为了便于对象遍历的测试,我在下面定义了一个测试对象obj。测试对象// 为 Object 设置三个自定义属性(可枚举)Object.p..
技术学习要兼顾深度和广度夯实技术基础这么多年来,我面试了很多人。我越发感到「技术基础」非常重要。很多技术的本质是一样的。技术基础足够好的话,学东西可以非常快。往下到操作系统层面,甚至计算机硬件层面,你..
JavaScript开发人员倾向于寻找可用于机器学习模型训练的JavaScript框架。下面是一些机器学习算法,基于这些算法可以使用本文中列出的不同JavaScript框架来模型训练:简单的线性回归多变量线性回归逻辑回归朴素贝叶斯..
以下我们将为大家介绍 JavaScript 保留两位小数的实现方法:四舍五入以下处理结果会四舍五入:var num =2.446242342;num = num.toFixed(2); // 输出结果为 2.45不四舍五入以下处理结果不会四舍五入:第一种,先把小数边..
JavaScript 实现页面跳转重定向可以使用以下两种方法:window.location.replace("url")类似 HTTP 重定向将地址替换成新 url,该方法通过指定 URL 替换当前缓存在历史里(客户端)的项目,因此当使用 replace 方法之..