首页 > 其他分享 >请说说JS中的索引数组、关联数组和静态数组、动态数组的定义与区别

请说说JS中的索引数组、关联数组和静态数组、动态数组的定义与区别

时间:2024-12-10 09:31:32浏览次数:6  
标签:arr name 关联 索引 数组 JS

在 JavaScript 中,数组的概念比较灵活,不像一些强类型语言那样区分得那么严格。JS 中的数组实际上是一种特殊的对象,既可以像索引数组一样通过数字索引访问元素,也可以像关联数组一样通过字符串键访问元素。所以,严格意义上来说,JS 只有动态数组,它兼具了索引数组和关联数组的特性。而静态数组的概念在 JS 中并不直接存在。

让我们分别解释一下这些概念在 JS 中的体现:

1. 索引数组 (概念上的)

  • 定义: 元素通过数字索引(从 0 开始)进行访问的数组。这是最常见的数组使用方式。
  • 在 JS 中: JS 的数组天然支持这种访问方式。当你使用数字索引访问或添加元素时,JS 数组就表现得像一个索引数组。
let arr = [10, 20, 30];
console.log(arr[0]); // 输出 10
arr[3] = 40;       // 添加元素
console.log(arr); // 输出 [10, 20, 30, 40]

2. 关联数组 (概念上的)

  • 定义: 元素通过字符串键值进行访问的数组,类似于其他语言中的字典或哈希表。
  • 在 JS 中: JS 的数组本身并非真正的关联数组,但由于其底层是对象,你可以使用字符串作为键来添加属性。然而,这样做并不会改变数组的长度,一些数组方法(例如 lengthforEach 等)也不会考虑这些字符串键。 更推荐使用 Map 或普通对象来实现真正的关联数组功能。
let arr = [10, 20, 30];
arr["name"] = "John"; // 添加一个属性,而不是数组元素
console.log(arr.name); // 输出 "John"
console.log(arr.length); // 输出 3,长度不变
console.log(arr); // 输出 [10, 20, 30, name: "John"]  // 注意显示方式,表明它不是一个真正的数组元素

// 使用对象实现关联数组
let obj = {};
obj["name"] = "John";
obj["age"] = 30;
console.log(obj.name); // 输出 "John"

// 使用Map实现关联数组
let myMap = new Map();
myMap.set("name", "John");
myMap.set("age", 30);
console.log(myMap.get("name")); // 输出 "John"

3. 静态数组 (概念上的)

  • 定义: 长度在创建后就固定不变的数组。
  • 在 JS 中: JS 不支持静态数组。JS 的数组是动态的,可以随时添加或删除元素,长度会随之改变。

4. 动态数组 (JS 中的实际情况)

  • 定义: 长度可以动态调整的数组。
  • 在 JS 中: JS 中的所有数组都是动态数组。你可以使用 push()pop()splice() 等方法来修改数组的长度和内容。

总结:

在 JavaScript 中,你只需要理解动态数组的概念,它融合了索引数组的数字索引访问方式和类似关联数组的字符串键值属性(尽管不推荐使用后者)。 不要被其他语言中的静态数组或真正的关联数组的概念混淆,JS 的数组具有其独特的灵活性。 如果需要真正的关联数组功能,请使用 Map 或普通对象。

希望这个解释能够帮助你理解 JS 中数组的概念。

标签:arr,name,关联,索引,数组,JS
From: https://www.cnblogs.com/ai888/p/18596608

相关文章

  • (免费源码)计算机毕业设计必学必看 万套实战教程 java、python、php、node.js、c#、APP
    摘 要随着社会经济的快速发展,我国机动车保有量大幅增加,城市交通问题日益严重。为缓解用户'停车难'问题,本文设计并实现了APP停车位共享系统'.该系统通过错峰停车达到车位利用率最大化.基于现状分析,本文结合实际停车问题,从系统应用流程,系统软硬件设计和系统实现三方面......
  • 使用js如何创建一个private方法?
    在JavaScript中,没有真正的私有方法的关键字(像Java或C#中的private)。但是,有几种方法可以实现类似私有方法的行为,提供不同程度的封装和安全性。1.使用Symbol作为属性名:这种方法利用Symbol的唯一性来创建“私有”属性,从而间接地创建“私有”方法。虽然技术上仍然可以访问,但这种方......
  • 升级易优EyouCms到1.6.9版本后,发表内容时没有弹窗,JS无法加载,是什么原因?
    在升级易优EyouCms到1.6.9版本后,如果遇到发表内容时没有弹窗且JS无法加载的问题,通常是由于网站启用了SSL(HTTPS)而内部资源引用仍然使用HTTP协议导致的。这种情况下,浏览器会阻止混合内容(即HTTPS页面中加载HTTP资源),从而导致JS文件无法正确加载。以下是详细的解决步骤和注意事项:解决......
  • 前端 js + html + css 特效 001
    <!DOCTYPEhtml><htmllang="en"><head><title>CodeTheWorld-Electricstrings</title><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><sc......
  • node.js毕设城科毕业生就业管理系统app程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于毕业生就业管理系统的研究,现有研究主要以就业信息平台或就业指导网站等为主,专门针对城科毕业生就业管理系统app的研究较少。在国内外就业形势日益复......
  • node.js毕设城市出行行程智能推荐系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于城市出行行程智能推荐系统的研究,现有研究主要以单一出行方式的优化或通用的路径规划为主,专门针对整合多种出行方式并依据用户个性化需求来智能推荐......
  • node.js毕设城市房屋租赁出售系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于城市房屋租赁出售系统的研究,现有研究多集中于房地产市场的宏观分析或传统交易模式的局部优化。专门针对整合城市房屋租赁与出售业务于一体,借助信息......
  • 唯一索引、普通索引的使用场景
    假设我们有两个表t1和t2:CREATETABLEt1(idINTNOTNULLAUTO_INCREMENT,key1VARCHAR(100)PRIMARYKEY(id),KEYidx_key1(key1))Engine=InnoDBCHARSET=utf8;CREATETABLEt2(idINTNOTNULLAUTO_INCREMENT,key1VARCHAR(100......
  • JS-7 typeof 运算符
    数值:number、字符串:string、布尔值:bookan、对象:objectJavaScript有三种方法,可以确定一个值到底是什么类型,而我们现在需要接触到的就是typeof1、数值返回numbertypeo123//"number"2、字符串返回stringtypeof'123'//"string"3、布尔值返回booleantypeof......
  • JS-6 数据类型
    数据类型:数值、字符串、布尔值、undefined、null、对象1、数据类型分类JavaScript语言的每一个值,都属于某一种数据类型。JavaScript的数据类型,共有六种。(ES6又新增了第七种Symbol类型的值和第八种BIglnt类型)2、数据类型分类原始分类(基础类型):数值、字符串、布尔值。......