首页 > 基础资料 博客日记
JavaScript:数据类型 / 基本数据类型 / 引用数据类型 / 特殊类型 / ES6 提供的类型
2024-08-08 09:00:07基础资料围观245次
一、掌握数据类型的重要性
掌握JavaScript数据类型非常重要,因为JavaScript是一种动态类型的编程语言,数据类型的正确使用对于开发人员来说至关重要。以下是掌握JavaScript数据类型的几个重要原因:
序号 | 原因 | 解释 |
1 | 帮助避免错误 | 了解和正确使用JavaScript数据类型可以帮助开发人员避免常见的错误。例如,如果不了解数据类型的规则,可能会发生类型转换错误或意外的行为。 |
2 | 决定操作的结果 | JavaScript中的不同数据类型具有不同的行为和操作。了解数据类型可以帮助开发人员确定在特定情况下使用何种操作,并预测操作的结果。 |
3 | 内存管理 | 了解数据类型还有助于理解JavaScript中的内存管理。不同的数据类型在内存中占用不同的空间,正确使用数据类型可以优化内存使用并提高性能。 |
4 | 开发高质量的代码 | 了解和正确使用数据类型可以帮助开发人员编写高质量的代码。使用正确的数据类型可以使代码更具可读性、可维护性和可扩展性。 |
5 | 与其他编程语言交互 | 掌握数据类型还有助于与其他编程语言进行交互。不同的编程语言可能具有不同的数据类型,了解它们可以更轻松地在不同的环境中工作。 |
掌握JavaScript数据类型对于编写高质量、可维护和可扩展的代码至关重要。它可以帮助避免错误,预测操作结果,优化内存使用,并与其他编程语言进行交互。 |
二、JavaScript数据类型简介
2.1、基本类型
基本类型 / 原始数据类型 | ||
序号 | 类型 | 解释 |
1 | 数字 / number | 用于表示数值,可以是整数或浮点数。 例如:10, 3.14。 |
2 | 字符串 / string | 用于表示文本。由一系列字符组成,可以使用单引号(')、双引号(")或模板字符串(`)来定义。 例如:"Hello, world!"。 |
3 | 布尔值 / boolean | 用于表示真值(true)或假值(false)。主要用于条件判断和逻辑运算。 例如:true, false。 |
4 | 空 / null | 表示一个没有值的特殊类型。它是一个关键字,表示变量不引用任何对象。 例如:null。 |
5 | 未定义 / undefined | 表示一个未赋值的变量。当声明了一个变量但没有给它赋值时,它的值就是undefined。 例如:let x; (未赋值的变量x的值就是undefined)。 |
2.2、引用类型
引用类型 / 复杂数据类型 / 对象类型 | ||
序号 | 类型 | 解释 |
1 | 对象 / object | 对象是引用类型的基础,它是一组无序的键值对集合。对象可以使用字面量、构造函数或Object.create()方法来创建。 |
2 | 数组 / array | 数组是一种特殊的对象,其中的值按照数字索引(从0开始)进行存储。数组有多种初始化方式,可以使用字面量或Array构造函数来创建。 |
3 | 函数 / function | 函数也是一种对象,具有可执行的代码块。函数可以接受参数、执行一些操作并返回值。可以使用function关键字、函数声明或函数表达式来创建函数。 |
4 | 日期 / Date | 日期对象用于处理日期和时间的操作,可以获取、设置和计算日期和时间。 |
5 | 正则表达式 / RegExp | 正则表达式可以用来匹配和操作字符串。它由一个模式和一些可选的标志组成,可以进行字符匹配、替换和提取等操作。 |
6 | 错误对象 / Error | var myError = new Error("This is an error message"); |
7 | Math对象 / 不属于引用类型 | 不属于引用类型,Math对象不属于JavaScript中的引用类型。它是一个内置对象,而引用类型通常是由开发人员创建的对象。 |
8 | JSON对象 | JSON对象在JavaScript中属于引用类型。JSON是一种用于表示数据的格式,它 stands for JavaScript Object Notation(JavaScript对象表示法)。虽然JSON是一种数据格式,但在JavaScript中,它也被解析为一个对象。 var obj = { name: "John", age: 25 }; var jsonStr = JSON.stringify(obj); var parsedObj = JSON.parse(jsonStr); |
在JavaScript中,引用类型是一种数据类型,它是对象类型,或者更具体地说,是除Number、String、Boolean、Null、Undefined之外的任何数据类型。引用类型(也称为对象类型)的值是对象,保存在堆内存中。变量对实际的对象只是一个引用,而不是实际的对象。这样,不同的变量可以指向同一个对象,而修改这个对象会影响到所有的变量。 |
2.3、特殊类型
特殊类型 | ||
序号 | 类型 | 解释 |
1 | NaN | 表示一个非数值(Not a Number)的特殊值。它是一个全局对象属性,当进行数学运算失败时,会返回NaN。 例如:0/0。 |
2 | Infinity | 表示无穷大的特殊值。当进行数学运算导致一个值超出了JavaScript能表示的范围时,会返回Infinity。 例如:1 / 0。 |
2.4、ES6中提供的数据类型
ES6中提供的数据类型 | ||
序号 | 类型 | 解释 |
1 | Symbol | Symbol是一种原始数据类型,表示一个唯一的标识符。它可以用作对象属性的键,用于创建唯一的常量值。 |
2 | Set | Set是一种新的集合数据结构,它允许存储任何类型的唯一值。Set中的值是无序的,且不允许重复。 |
3 | Map | Map是一种新的键值对数据结构,它类似于对象,但可以使用任意类型的值作为键,并且保持插入顺序。 |
4 | WeakSet | WeakSet是一种特殊的Set,它只能存储对象,并且对于存储的对象是弱引用,即如果没有其他引用指向这个对象,它将会被垃圾回收。 |
5 | WeakMap | WeakMap是一种特殊的Map,它只能使用对象作为键,并且对于键所引用的对象是弱引用,即如果没有其他引用指向这个对象,它将会被垃圾回收。 |
2.5、ES6还引入了一些特性来增强现有的数据类型
序号 | 方法 | 解释 |
1 | let和const关键字 | 用于声明块级作用域的变量(let)和常量(const)。 |
2 | Arrow function(箭头函数) | 一种更简洁的函数声明语法,提供了更方便的this绑定和更短的函数体写法。 |
3 | Class(类) | 引入了class关键字,用于定义类和面向对象的编程。 |
4 | Promise(Promise对象) | 用于异步操作的解决方案,可以更优雅地处理异步编程。 |
2.6、BigInt
BigInt 是在 ES2020(ECMAScript 2020)中引入的一种新的数据类型,用于表示任意大小的整数。在 ES6 中,虽然 JavaScript 的 Number 类型能够表示很大范围的数值,但其精度是有限的,对于超过 Number.MAX_SAFE_INTEGER
(即 2^53 - 1
)的整数,JavaScript 的 Number 类型无法精确表示。而 BigInt 的出现解决了这个问题,允许 JavaScript 能够安全地表示和操作任意大小的整数。
需要注意的是,BigInt 和其他 JavaScript 数字类型(如 Number)是不兼容的,它们之间不能直接进行算术运算。如果需要进行混合运算,需要将 BigInt 转换为 Number,或者将 Number 转换为 BigInt,但这样可能会导致精度损失或溢出。因此,在使用 BigInt 时需要特别注意数据类型的转换和运算的精度问题。
三、数据类型详解
3.1、number类型
3.2、String类型
3.3、boolean类型
3.4、undefined类型
只有一个值,即undefined,如果声明了一个变量,但是未给变量初始化值,那么这个变量的值就是undefined
调用函数时,应该提供的参数没有提供,该参数等于undefined
对象没有赋值的属性,该属性的值为undefined
函数没有返回值,默认返回undefined
3.5、null类型
只有一个值。null表示一个空对象指针,这也是typeof操作检测null值时会返回object的原因
3.6、object类型
3.7、Symbol类型
Symbol类型的对象永远不相等,即便创建的时候传入相同的值。因此,可以用解决属性名冲突的问题(适用于多少编码),作为标记。
3.8、Set
Set 是 ES6(ECMAScript 2015)提供的一种新的数据类型。
Set 对象是一种特殊的类型,它类似于数组,但成员的值都是唯一的,没有重复的值。Set 的一个关键特性就是成员的值都是唯一的,没有重复的值。Set 内部使用类似于 Hash 表的机制,所以插入和查找的效率很高,都为 O(1)。
使用 Set 可以很容易地实现并集(Union)、交集(Intersection)和差集(Difference)操作,因此非常适合用于处理集合运算。
下面是一个简单的例子,展示了如何使用 Set:
javascript
// 创建一个 Set 对象
const mySet = new Set();
// 添加成员
mySet.add(1);
mySet.add(2);
mySet.add(2); // 添加重复成员,Set 会自动去重
// 检查成员是否存在
console.log(mySet.has(1)); // 输出: true
console.log(mySet.has(3)); // 输出: false
// 删除成员
mySet.delete(2);
console.log(mySet.has(2)); // 输出: false
// 获取 Set 的大小
console.log(mySet.size); // 输出: 1
// 遍历 Set 成员
for (let item of mySet) {
console.log(item); // 输出: 1
}
由于 Set 的成员都是唯一的,所以经常用于需要去除数组中重复元素的场景。同时,Set 对象的属性和方法也提供了很多有用的功能,比如 clear() 方法用于清空 Set,keys()、values() 和 entries() 方法返回一个新的迭代器对象,它包含 Set 对象中每个元素的 [value, value] 对。
四、JavaScript类型转换
4.1、数值转换字符串String()
4.2、数值转换字符串:toString()
4.3、字符串转数值:Number()
一元的 + 运算符可用于把变量转换为数字:
如果无法转换变量则仍会成为数字,但是值为NaN(Not a number):
4.4、日期转数字:Number()
4.5、日期转数字:getTime()
JavaScript 类型转换 (w3school.com.cn)
五、检验数据类型
5.1、typeof()
5.2、isNaN()
5.3、instanceof()
5.4、对象的constructor属性
5.5、Array.isArray检验值是否为数组
六、过程记录
6.1、null和undefined区别
Null只有一个值,是null。不存在对象。
Undefined只有一个值,是undefined。没有初始化。undefined是从null中派生出来的。
简单理解就是:undefined是没有定义的,null是定义了但是为空。
6.2、null不存在的原因,解决方法
6.3、==和===区别,使用场景
6.4、对象可以比较?
6.5、借助undefined值检测一个变量是否被初始化
let a;
console.log(a);
(a == undefined) && (a = 0);
console.log(a);
或借助typeof运算符检测变量的类型是否为undefined。
(typeof a == 'undefined') && (a = 0);
大小写注意:小写的number只是关键字,Number是内置对象,number类型的变量都是继承的Number对象,本质上也是对象。
七、欢迎交流指正
八、参考链接
JS 判断数据类型的方法_s_kzn的博客-CSDN博客_js判断数据类型的方法
JS 判断数据类型的方法_s_kzn的博客-CSDN博客_js判断数据类型的方法
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签: