从0开始学习JavaScript--JavaScript数据类型与数据结构

JavaScript作为一门动态、弱类型的脚本语言,拥有丰富的数据类型和数据结构,这些构建了语言的基础,为开发者提供了灵活性和表达力。本文将深入探讨JavaScript中的各种数据类型,包括基本数据类型和复杂数据类型,并介绍常用的数据结构,以丰富的示例代码帮助读者更好地理解和应用这些概念。

基本数据类型

JavaScript有七种基本数据类型,分别是:

  • Number(数字)
  • String(字符串)
  • Boolean(布尔)
  • Null(空)
  • Undefined(未定义)
  • Symbol(符号,ES6新增)
  • BigInt(大整数,ES2020新增)
// 示例:基本数据类型
let num = 42; // Number
let str = 'Hello, World!'; // String
let isTrue = true; // Boolean
let empty = null; // Null
let notDefined = undefined; // Undefined
let sym = Symbol('unique'); // Symbol
let bigInt = 9007199254740991n; // BigInt

引用数据类型

引用数据类型包括:

  • Object(对象)
  • Array(数组)
  • Function(函数)
  • Date(日期)
  • RegExp(正则表达式)
  • Map(映射)
  • Set(集合)
// 示例:引用数据类型
let obj = { key: 'value' }; // Object
let arr = [1, 2, 3]; // Array
let func = function() { /* 函数体 */ }; // Function
let today = new Date(); // Date
let regex = /pattern/; // RegExp

let map = new Map();
map.set('name', 'John'); // Map

let set = new Set();
set.add(1).add(2).add(3); // Set

类型转换

JavaScript是一门弱类型语言,它会自动进行类型转换。了解类型转换有助于我们更好地理解代码的执行过程。

// 示例:类型转换
let numAsString = '42';
let convertedNum = Number(numAsString);
console.log(convertedNum); // 输出:42

let boolAsString = 'true';
let convertedBool = Boolean(boolAsString);
console.log(convertedBool); // 输出:true

数据结构

1 数组(Array)

数组是一种有序的集合,可以包含任意类型的数据。

// 示例:数组
let fruits = ['apple', 'orange', 'banana'];
console.log(fruits[0]); // 输出:apple
console.log(fruits.length); // 输出:3

2 对象(Object)

对象是一种无序的集合,由键值对组成。

// 示例:对象
let person = {
  name: 'John',
  age: 30,
  city: 'New York'
};
console.log(person.name); // 输出:John

3 Map和Set

Map是一种键值对的集合,而Set是一种值的集合,它们提供了更灵活的数据组织方式。

// 示例:Map和Set
let userMap = new Map();
userMap.set('name', 'Alice').set('age', 25);

let uniqueNumbers = new Set([1, 2, 3, 4, 5, 5, 5]);

JSON

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于前后端数据传输。

// 示例:JSON
let jsonData = '{"name": "Bob", "age": 28}';
let parsedData = JSON.parse(jsonData);
console.log(parsedData.name); // 输出:Bob

let dataToBeSent = { status: 'success', code: 200 };
let jsonString = JSON.stringify(dataToBeSent);

迭代与遍历

JavaScript提供了多种迭代和遍历数据结构的方式,如for...of循环、forEach方法等。

// 示例:迭代与遍历
let numbers = [1, 2, 3, 4, 5];
for (let num of numbers) {
  console.log(num);
}

numbers.forEach(num => {
  console.log(num);
});

数据类型与数据结构的选择

在实际开发中,选择合适的数据类型和数据结构至关重要。例如,使用数组来存储有序的数据集合,使用对象或Map来存储键值对。

// 示例:数据类型与数据结构的选择
let student1 = { name: 'Alice', age: 20, grade: 'A' };
let student2 = { name: 'Bob', age: 22, grade: 'B' };
let studentsArray = [student1, student2];

let studentsMap = new Map();
studentsMap.set('Alice', { age: 20, grade: 'A' });
studentsMap.set('Bob', { age: 22, grade: 'B' });

常见问题与解决方案

在处理JavaScript数据类型和数据结构时,常常会遇到一些常见的问题,例如如何遍历嵌套对象、如何判断数据类型等。以下是一些常见问题的解决方案。

1 遍历嵌套对象

遍历嵌套对象需要使用递归或其他迭代方法。

// 示例:遍历嵌套对象
function recursiveIteration(obj) {
  for (let key in obj) {
    if (typeof obj[key] === 'object' && obj[key] !== null) {
      recursiveIteration(obj[key]);
    } else {
      console.log(obj[key]);
    }
  }
}

let nestedObject = {
  key1: 'value1',
  key2: {
    key3: 'value3',
    key4: {
      key5: 'value5'
    }
  }
};

recursiveIteration(nestedObject);

2 判断数据类型

判断数据类型可以使用typeof运算符,但对于对象和数组,更准确的方式是使用Array.isArrayObject.prototype.toString方法。

// 示例:判断数据类型
let data = [1, 2, 3];

console.log(typeof data); // 输出:object
console.log(Array.isArray(data)); // 输出:true
console.log(Object.prototype.toString.call(data)); // 输出:[object Array]

实战示例

结合实际场景,可以使用数据类型和数据结构来解决具体问题。比如,在一个学生信息管理系统中,可以使用对象存储学生信息,数组存储所有学生,通过遍历和查询实现各种功能。

// 示例:学生信息管理系统
let students = [
  { name: 'Alice', age: 20, grade: 'A' },
  { name: 'Bob', age: 22, grade: 'B' },
  // 更多学生...
];

function addStudent(student) {
  students.push(student);
}

function findStudentByName(name) {
  return students.find(student => student.name === name);
}

// 其他功能函数...

// 添加新学生
addStudent({ name: 'Charlie', age: 21, grade: 'A' });

// 查找学生信息
let foundStudent = findStudentByName('Bob');
console.log(foundStudent); // 输出:{ name: 'Bob', age: 22, grade: 'B' }

总结

深入理解JavaScript的数据类型与数据结构对于编写高效、清晰的代码至关重要。通过对基本数据类型、引用数据类型、常见数据结构以及类型转换的深入学习,能够更好地应用这些知识解决实际问题。

随着JavaScript语言的发展,可以期待更多新的数据类型和数据结构的出现,以及更多方便的数据操作方法,进一步提高开发效率。希望本文能够为大家提供对JavaScript数据类型与数据结构的深入了解,为日后的编程实践提供有力的支持。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023.11.24制作一个常用的登录注册模板(包含密码验证、输出格式验证、验证码等功能)

2023.11.24制作一个常用的登录注册模板(包含密码验证、输出格式验证、验证码等功能) 1. 简介2. 功能3. 页面效果3.1 登录页面3.2 忘记密码页3.3 注册页面 1. 简介 比较喜欢简洁风,只是用bootstrap进行简单装饰 制作一个模板,日常…

Leetcode---372周赛

题目列表 2937. 使三个字符串相等 2938. 区分黑球与白球 2939. 最大异或乘积 2940. 找到 Alice 和 Bob 可以相遇的建筑 一、使三个字符串相等 这题把题目意思读懂,正常模拟就行,简单来说就是看三个字符串的最长公共前缀有多长, 代码如下…

学习Pandas 二(Pandas缺失值处理、数据离散化、合并、交叉表与透视表、分组与聚合)

文章目录 六、高级处理-缺失值处理6.1 检查是否有缺失值6.2 缺失值处理6.3 不是缺失值NaN,有默认标记的 七、高级处理-数据离散化7.1 什么是数据的离散化7.2 为什么要离散化7.3 如何实现数据的离散化 八、高级处理-合并8.1 pc.concat实现合并,按方向进行…

x-www-form-urlencoded的含义解释,getReader()和getParameter()的区别

1、x-www-form-urlencoded x-www-form-urlencoded是一种编码格式,它是一种常见的编码方式,用于在HTTP请求中 传输表单数据 。在这种编码方式下,表单数据被编码为URL格式,然后作为请求体(payload)发送。 需要…

前端大厂(腾讯、字节跳动、阿里......)校招面试真题解析,让你面试轻松无压力!

前言 校招很重要,应届生的身份很珍贵!在校招的时候与我们竞争的大部分都是没有工作经验的学生,而且校招企业对学生的包容度高,一般对企业来说,社招更看重实际工作经验,而校招更愿意“培养人”,校…

FindMy技术用于旅行箱

旅行箱,那是出门在外的我们不可或缺的伙伴。无论是商务出差,还是短途旅行,亦或是长途度假,旅行箱都以其便捷的方式,陪伴着我们的整个行程。 然而,在旅途中,丢失旅行箱是一件非常棘手的问题&…

【Web】PhpBypassTrick相关例题wp

目录 ①[NSSCTF 2022 Spring Recruit]babyphp ②[鹤城杯 2021]Middle magic ③[WUSTCTF 2020]朴实无华 ④[SWPUCTF 2022 新生赛]funny_php 明天中期考,先整理些小知识点冷静一下 ①[NSSCTF 2022 Spring Recruit]babyphp payload: a[]1&b1[]1&b2[]2&…

【计算机网络笔记】数据链路层——差错编码

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

RK3588平台 USB框架与USB识别流程

一.USB的基本概念 在最初的标准里,USB接头有4条线:电源,D-,D,地线。我们暂且把这样的叫做标准的USB接头吧。后来OTG出现了,又增加了miniUSB接头。而miniUSB接头则有5条线,多了一条ID线,用来标识身份用的。 热插拔&am…

VR全景展示,“超前点播”打开娱乐行业线上营销门户

如今,人们的生活水平正在逐步提高,这种提高不仅仅是体现在衣食住行上,更多方面是体现在大众的娱乐活动上。我们可以看到,相比于过去娱乐种类的匮乏,现如今,各种娱乐活动可谓是百家争鸣,例如温泉…

03.依赖倒置原则(Dependence Inversion Principle)

概述 高层模块不应依赖低层模块,二者都应该依赖其抽象。而抽象不应依赖细节,细节应该依赖抽象。依赖倒置原则的中心思想其实就是面向接口编程。 相对于细节的多变性,抽象的东西会稳定的多,所以以抽象为基础搭建的架构自然也会比以…

最新Midjourney绘画提示词Prompt教程无需魔法

最新Midjourney绘画提示词Prompt教程无需魔法使用 一、AI绘画工具 SparkAi【无需魔法使用】: SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧!本系统使用NestjsVueTypes…

App 设计工具

目录 说明 打开 App 设计工具 示例 创建 App 创建自定义 UI 组件 打开现有 App 文件 打包和共享 App 本文主要讲述以交互方式创建 App。 说明 App 设计工具是一个交互式开发环境,用于设计 App 布局并对其行为进行编程。 可以使用 App 设计工具&#xff1a…

Python---函数的参数类型

位置参数 理论上,在函数定义时,我们可以为其定义多个参数。但是在函数调用时,我们也应该传递多个参数,正常情况,其要一一对应。 相关链接:Python---函数的作用,定义,使用步骤&…

1、postman的安装及使用

一、安装、登录 1.安装 下载地址 2.注册登录(保存云服务进度) 二、界面介绍 三、执行接口测试页面 请求页签: 1、params:当是get请求时,通过params传参 2、authorization:鉴权 3、headers&#xff1…

Ps:画笔工具的基本操作

画笔工具 Brush Tool是 Ps 中最常用的工具,广泛地用于绘画与修饰工作。 虽然多数操作可在画笔工具的工具选项栏中选择执行,但是如果能记住相应的快捷键可大大提高工作效率。 熟练掌握画笔工具的操作对于使用其他工具也非常有益,因为 Ps 中许多…

超声波雪深传感器冬季里的科技魔法

在冬季的某个清晨,当你打开大门,被厚厚的积雪覆盖的大地映入眼帘,你是否曾想过,这片雪地的深度是多少?它又如何影响着我们的生活和环境?今天,我们将为你揭开这个谜团,介绍一款神秘的…

2023/11/24JAVAweb学习

age只会执行成立的,show其实都展示了,通过display不展示 使用Vue,必须引入Vue.js文件 假如运行报错,以管理员身份打开vscode,再运行 ------------------------------------------------------------------- 更改端口号

【web】Fastapi自动生成接口文档(Swagger、ReDoc )

简介 FastAPI是流行的Python web框架,适用于开发高吞吐量API和微服务(直接支持异步编程) FastAPI的优势之一:通过提供高级抽象和自动数据模型转换,简化请求数据的处理(用户不需要手动处理原始请求数据&am…

web前端开发基础----标准流布局和非标准流布局

1,标准流布局 标准流,也称文档流或普通流,是所有元素默认的布局方式。 在标准流中,元素按照其在 HTML 中出现的顺序,自上而下依次排列,并占据其父容器内的可用空间。 标准流中的元素按照其自然尺寸和位置进…