JavaScript 中字符串和数组的概念解析与多角度对比区分


文章目录

  • 💯前言
  • 💯字符串(String)
  • 💯数组(Array)
  • 💯字符串与数组的相同点与不同点
  • 💯字符串和数组的实际应用场景
  • 💯字符串与数组的互转
  • 💯字符串和数组的性能对比
  • 💯总结


在这里插入图片描述



💯前言

  • JavaScript 是一种动态类型、基于对象的编程语言,被广泛应用于前端和后端开发。在开发中,字符串(String)和数组(Array)是最常用的数据结构之一,它们有各自独特的特性和使用场景。本文将深入解析 JavaScript 中的字符串和数组,并通过多个角度对比它们的区别与联系,帮助读者更好地理解和使用这两种数据结构。
    String
    在这里插入图片描述
    Array
    在这里插入图片描述

💯字符串(String)

在这里插入图片描述

  1. 字符串的定义

    JavaScript 中,字符串可以通过单引号、双引号或反引号(模板字符串)来定义。例如:

    let str1 = 'Hello, World!';
    let str2 = "Hello, JavaScript!";
    let str3 = `Hello, ${str1}`;
    

    反引号允许嵌入表达式,使字符串的拼接更加方便。

  2. 字符串的不可变性

    字符串JavaScript 中是不可变的,这意味着字符串的内容一旦创建就不能被改变。如果想修改字符串的内容,只能创建一个新字符串。

    let str = 'Hello';
    str[0] = 'h';  // 无效操作,字符串不可变
    str = 'hello'; // 创建了一个新的字符串
    
  3. 字符串的常用方法

    JavaScript 提供了丰富的方法来操作字符串,例如:

    • length:返回字符串的长度。
    • charAt(index):返回指定位置的字符。
    • indexOf(substring):查找子字符串在原字符串中的位置。
    • toUpperCase()toLowerCase():将字符串转换为大写或小写。
    • substring(start, end):截取字符串的一部分。
    • split(separator):将字符串分割为数组。
    let str = 'Hello, JavaScript!';
    console.log(str.length);        // 输出 17
    console.log(str.charAt(1));     // 输出 'e'
    console.log(str.indexOf('JavaScript')); // 输出 7
    console.log(str.toUpperCase()); // 输出 'HELLO, JAVASCRIPT!'
    console.log(str.substring(0, 5)); // 输出 'Hello'
    console.log(str.split(' '));    // 输出 ['Hello,', 'JavaScript!']
    

💯数组(Array)

在这里插入图片描述

  1. 数组的定义

    数组可以使用方括号 [] 来定义,元素之间用逗号分隔。数组的元素可以是任意数据类型,包括字符串、数字、布尔值、对象等。

    let arr = [1, 'Hello', true, { key: 'value' }, [1, 2, 3]];
    
  2. 数组的动态性

    JavaScript 中的数组是动态类型的,这意味着数组可以存储不同类型的元素,且长度是可以随时变化的。通过 length 属性可以修改数组的长度。

    let arr = [1, 2, 3, 4, 5];
    arr.length = 3;  // 截断数组,arr 变为 [1, 2, 3]
    arr.push(6);     // 添加元素,arr 变为 [1, 2, 3, 6]
    
  3. 数组的常用方法

    JavaScript 提供了大量的数组方法来操作数组,例如:

    • push(element):向数组末尾添加一个或多个元素。
    • pop():移除并返回数组的最后一个元素。
    • shift():移除并返回数组的第一个元素。
    • unshift(element):向数组的开头添加一个或多个元素。
    • slice(start, end):返回数组的一部分。
    • splice(start, deleteCount, item1, item2, ...):用于增删改数组元素。
    • forEach(callback):对数组的每个元素执行一次提供的函数。
    • map(callback):对数组的每个元素执行一次提供的函数,并返回一个新数组。
    let arr = [1, 2, 3, 4, 5];
    arr.push(6);            // [1, 2, 3, 4, 5, 6]
    arr.pop();              // [1, 2, 3, 4, 5]
    arr.shift();            // [2, 3, 4, 5]
    arr.unshift(1);         // [1, 2, 3, 4, 5]
    let newArr = arr.map(x => x * 2); // [2, 4, 6, 8, 10]
    

💯字符串与数组的相同点与不同点

在这里插入图片描述

  1. 数据类型和存储内容

    • 字符串:字符串只能存储字符序列,表示文本。
    • 数组:数组可以存储任何类型的元素,包括字符串、数字、布尔值、对象等。
    let str = 'Hello';
    let arr = [1, 'Hello', true];
    
  2. 长度的可变性

    • 字符串:字符串的长度是不可变的,即一旦创建,字符串中的字符和长度都无法更改。要修改字符串内容,需要创建一个新的字符串。
    • 数组:数组的长度是可变的,可以通过 length 属性动态增加或减少数组的大小。
    let str = 'Hello';
    str[0] = 'h';        // 无效操作,字符串不可变
    str = 'hello';       // 重新赋值,创建了一个新字符串let arr = [1, 2, 3];
    arr.length = 2;      // 截断数组,arr 变为 [1, 2]
    arr.push(4);         // 添加元素,arr 变为 [1, 2, 4]
    
  3. 不可变性与可变性

    • 字符串不可变:字符串是不可变的数据类型,修改字符串实际上是创建一个新的字符串对象。
    • 数组可变:数组是可变的,可以随时添加、删除或修改数组的元素。
  4. 索引访问

    • 字符串数组都可以通过索引访问其中的元素,但字符串的元素只能是字符,而数组的元素可以是任何类型。
    let str = 'Hello';
    console.log(str[1]);  // 输出 'e'let arr = [1, 'Hello', true];
    console.log(arr[1]);  // 输出 'Hello'
    
  5. 方法的差异

    字符串和数组都有各自特定的方法来操作自身的数据。

    • 字符串方法:主要用于字符串的查找、分割、转换等操作,如 charAt()indexOf()substring() 等。
    • 数组方法:用于添加、删除、查找、遍历等操作,如 push()pop()map()forEach() 等。
    let str = 'Hello World';
    console.log(str.toUpperCase());  // 'HELLO WORLD'let arr = [1, 2, 3];
    arr.push(4);
    console.log(arr);                // [1, 2, 3, 4]
    
  6. 循环遍历

    • 字符串:可以通过 for 循环遍历字符串的每一个字符。
    • 数组:不仅可以使用 for 循环,还可以使用 forEach()for...of 等方式遍历数组。
    let str = 'Hello';
    for (let char of str) {console.log(char);  // 输出每一个字符:'H', 'e', 'l', 'l', 'o'
    }let arr = [1, 2, 3];
    arr.forEach(element => console.log(element));  // 输出每一个元素:1, 2, 3
    

💯字符串和数组的实际应用场景

在这里插入图片描述

  1. 字符串的应用场景

    • 文本处理:字符串用于处理文本,如用户输入、消息提示、日志记录等。
    • 模板字符串:使用反引号和嵌入表达式,可以方便地进行字符串拼接和模板生成。
    let name = 'Alice';
    let message = `Hello, ${name}! Welcome to JavaScript.`;
    console.log(message);  // 输出 'Hello, Alice! Welcome to JavaScript.'
    
  2. 数组的应用场景

    • 存储集合数据:数组常用于存储一组相关的数据,如列表、队列、栈等。
    • 迭代和映射:可以对数组进行遍历、筛选、映射和聚合等操作。
    let numbers = [1, 2, 3, 4, 5];
    let doubled = numbers.map(num => num * 2);
    console.log(doubled);  // 输出 [2, 4, 6, 8, 10]
    

💯字符串与数组的互转

在这里插入图片描述

  1. 字符串转数组

    可以使用 split() 方法将字符串按指定的分隔符转换为数组。

    let str = 'a,b,c,d';
    let arr = str.split(',');
    console.log(arr);  // 输出 ['a', 'b', 'c', 'd']
    
  2. 数组转字符串

    可以使用 join() 方法将数组元素连接为一个字符串。

    let arr = ['a', 'b', 'c', 'd'];
    let str = arr.join('-');
    console.log(str);  // 输出 'a-b-c-d'
    

💯字符串和数组的性能对比

在这里插入图片描述

  1. 访问性能

    字符串数组在访问特定位置的元素时,性能相差不大,都是通过索引直接访问的,时间复杂度为 O(1)

  2. 修改性能

    • 字符串:由于不可变性,字符串的修改实际上是创建新字符串,因此在频繁拼接或修改时性能较低。为了优化性能,建议使用 Array 来拼接字符,然后再使用 join() 方法转换为字符串。
    • 数组:数组是可变的,添加、删除或修改元素的操作相对高效,特别是对于末尾元素的操作,时间复杂度为 O(1)。
  3. 内存使用
    字符串的不可变性意味着每次修改都会分配新的内存,频繁的字符串操作可能导致内存浪费。数组在需要频繁修改的情况下更节省内存。


💯总结

  • 在这里插入图片描述
    JavaScript 中,字符串数组是两种非常重要的数据结构,各自具有独特的特性和用途。字符串主要用于文本处理,是不可变的数据类型;而数组用于存储有序集合,可以包含不同类型的元素,并且是可变的。在开发过程中,理解它们的区别和应用场景,有助于编写出更加高效和易于维护的代码

  • 字符串适合处理不可变的文本数据,尤其在处理用户输入、消息展示等场景时非常实用。

  • 数组适合处理有序的可变数据,尤其在需要对数据进行增删、遍历和变换时表现出色。


在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/19047.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

4K双模MiniLED显示器哪个好

4K双模MiniLED显示器哪个好?现在市面上的4K双模MiniLED显示器太多了,琳琅满目,今天就给大家列举一下7款当下火热到爆炸的品牌,看看4K双模MiniLED显示器哪个好。 4K双模MiniLED显示器哪个好 - HKC G27M7PRO HKC G27M7Pro 是一款性…

每天五分钟深度学习pytorch:批归一化全连接网络完成手写字体识别

本文重点 前面我们学习了普通的全连接神经网络,后面我们学习了带有激活层的全连接神经网络,本文我们继续进一步升级,我们学习带有批归一化的全连接神经网络,批归一化可以加快神经网络的训练速度,减少过拟合,具体它的原理,大家可以看我们的《每天五分钟深度学习》专栏,…

excel打开csv文件乱码的问题

如图所示,在保存csv文件时已指定编码为utf-8,用excel打开后仍然乱码 解决方法: 在保存csv文件时指定编码为utf-8-sig 该编码方式会在文件开头加入一个 BOM(Byte Order Mark),有助于 Excel 正确识别 UTF-8…

QQ音乐 11.3.4 | 魅族定制版,极致简洁,无广告,不限机型

QQ音乐魅族定制版,界面设计极致简洁,没有任何广告干扰,支持听限免歌曲,不限机型使用。用户可以通过微信和QQ直接登录,享受纯净的音乐体验。 大小:94.6M 下载地址: 百度网盘:https:…

使用TensorFlow实现简化版 GoogLeNet 模型进行 MNIST 图像分类

在本文中,我们将使用 TensorFlow 和 Keras 实现一个简化版的 GoogLeNet 模型来进行 MNIST 数据集的手写数字分类任务。GoogLeNet 采用了 Inception 模块,这使得它在处理图像数据时能更高效地提取特征。本教程将详细介绍如何在 MNIST 数据集上训练和测试这…

TON商城与Telegram App:生态融合与去中心化未来的精彩碰撞

随着区块链技术的快速发展,去中心化应用(DApp)逐渐成为了数字生态的重要组成部分。而Telegram作为全球领先的即时通讯应用,不仅仅满足于传统的社交功能,更在区块链领域大胆探索,推出了基于其去中心化网络的…

vulhub之log4j

Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645) 漏洞简介 Apache Log4j是一个用于Java的日志记录库,其支持启动远程日志服务器。Apache Log4j 2.8.2之前的2.x版本中存在安全漏洞。攻击者可利用该漏洞执行任意代码。 Apache Log4j 在应用程序中添加日志记录最…

web服务nginx实验4:访问控制

4-1:基于不同用户的访问控制: 安装软件: 创建HTTP基本认证用户密码文件,tom,密码:1,lisa,密码:1: -c:表示创建一个新的密码文件。如果该文件已经…

基于FastAPI实现本地大模型API封装调用

关于FastAPI FastAPI 是一个现代、快速(高性能)的 Python Web 框架,用于构建基于标准 Python 类型提示的 API。它以简洁、直观和高效的方式提供工具,特别适合开发现代 web 服务和后端应用程序。 问题:_pad() got an un…

数字化点亮库布其沙漠的绿色梦想

Bentley 应用程序助力提升设计和施工效率,提前六周交付设计成果 清洁能源为沙漠带来新活力 库布其光伏治沙项目(以下简称“该项目”)位于内蒙古鄂尔多斯市库布其沙漠,占地约 10 万亩,是中国单体规模最大的光伏治沙项目…

基于单片机的风能太阳能供电的路灯智能控制系统设计(论文+源码)

1系统总体设计 本课题为风能太阳能供电的路灯智能控制系统设计,系统的主要功能设计如下: (1) 供电模块:采用太阳能板以及风机模拟风扇充电,经过充电电路给锂电池进行充电。再由锂电池给照明模块以及整个项…

Linux Centos7 Rocky网卡配置

目录 1.Vmare 虚拟机配置 (1)打开虚拟机输入ip a,查看ip网段,若为192.168.81.135 (2)在Vmare上的虚拟网络配置器配置 (3)确保电脑有VMnet1 VMnet8 2.Linux虚拟机Centos配置 &#…

MySQL索引原理之查询优化

MySQL索引原理之查询优化 1、慢查询定位 开启慢查询日志 查看 MySQL 数据库是否开启了慢查询日志和慢查询日志文件的存储位置的命令如下: SHOW VARIABLES LIKE %slow_query_log%通过如下命令开启慢查询日志: SET global slow_query_log 1; SET global …

ArchGuard 架构分析器发布:多语言、跨项目架构数据生成,助力 AI 时代知识挖掘...

TL;DR:https://github.com/archguard/archguard 过去的几个月里,我们一直在探索用 AI 辅助跨项目、跨大量微服务的系统的开发。其中一个重要的话题就是,从现有的软件架构去生成知识,文档是落后、多版本的, 只有代码才保…

NLP论文速读(多伦多大学)|利用人类偏好校准来调整机器翻译的元指标

论文速读|MetaMetrics-MT: Tuning Meta-Metrics for Machine Translation via Human Preference Calibration 论文信息: 简介: 本文的背景是机器翻译(MT)任务的评估。在机器翻译领域,由于不同场景和语言对的需求差异&a…

工程车识别算法平台LiteAIServer算法定制工程车类型检测算法:建筑工地安全管理的得力助手

随着科技的飞速发展,智能化技术正在逐步改变我们的生活方式,特别是在交通管理和安全管理领域。其中,算法定制LiteAIServer工程车类型检测算法以其高效、准确和实时的特性,成为了建筑工地管理、矿山开采以及物流运输等多个领域的重…

机器学习2

三、特征工程 接机器学习1 4、特征降维 4.2、主成分分析PCA 从原始特征空间中找到一个新的坐标系统,使得数据在新坐标轴上的投影能够最大程度地保留数据的方差,同时减少数据的维度。 保留信息/丢失信息信息保留的比例 from sklearn.decomposition imp…

【Linux之权限】提升篇

前言 在前两篇文章里,我们已经学习了Linux中权限的理论、实践和重点,接下来我们将进一步提升对Linux权限的全面认知。虽是拓展,其实还是重点。 本文内容并不多,那我们就开始吧。 目录的权限该如何理解呢? 如果我想进…

亮数据结合AI大模型,实现数据自由

目录 一、获取网络数据的挑战1、反爬虫机制的威胁2、IP封锁与访问频率控制3、数据隐私与法律合规 二、亮数据动态代理:数据采集的最佳拍档1、高质量IP资源2、智能调度与自动切换3、合规与隐私保护4、多场景应用支持 三、使用亮数据代理 IP进行网络数据抓取1、引入 r…

elasticsearch是如何实现master选举的?

大家好,我是锋哥。今天分享关于【elasticsearch是如何实现master选举的?】面试题。希望对大家有帮助; elasticsearch是如何实现master选举的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Elasticsearch 中&…