前言
本文将带领大家系统地探讨JavaScript中的数据类型,包括基本数据类型和引用数据类型的特征
让我们一起开启JavaScript数据类型的奥秘之旅吧!
基本类型?引用类型?
- 基本类型
基本数据类型是JavaScript中最基础的数据类型
-
值类型(Value Type) :
- 基本数据类型的值直接存储在变量中,是不可变的。
- 当你对一个基本类型变量赋值时,实际上是创建了一个新的值。
-
存储在栈(Stack)中:
-
基本类型的值被直接存储在内存的栈空间中。
-
栈空间的特点是访问速度快,但容量有限。
-
- 引用类型
-
存储位置:
- 基本数据类型的值直接存储在栈(Stack)中。
- 引用类型的值存储在堆(Heap)中,变量中存储的是指向堆中对象的引用。
-
比较方式:
- 基本数据类型比较的是值的比较。
- 引用类型比较的是引用的比较,即比较的是指向堆中同一个对象的引用。
-
可变性:
- 基本数据类型的值是不可变的。
- 引用类型的值是可变的,可以修改对象内部的属性。
七大基本类型
JavaScript 中的 7 种基本数据类型:
- Number: 表示数值,包括整数和浮点数。
- String: 表示文本数据。
- Boolean: 表示逻辑值
true或false。 - Undefined: 表示一个未定义的值。
- Null: 表示一个空或无效的值。
- Symbol: 表示一个唯一且不可变的标识符。
- BigInt: 表示任意长度的整数。
这其中Symbol和BigInt是ES6中新增了两种基本数据类型
Number
Number就是数字类型的,但是Number是有安全范围的
在 JavaScript 中,Number 数据类型采用 IEEE 754 标准,它可以表示的数值范围是 -2^53 到 2^53 之间的整数,也就是 -9007199254740991 到 9007199254740991。
这个范围被称为 JavaScript 的"安全整数范围"。在这个范围内,JavaScript 可以精确地表示整数,并进行各种算术运算而不会丢失精度。
一旦超出了这个范围,JavaScript 就无法精确地表示整数了。对于超出安全范围的整数值,JavaScript 会使用浮点数来表示,这样会导致一些精度问题。
String
String 类型用于表示文本数据。它可以包含字母、数字、标点符号和其他字符。在 JavaScript 中,字符串可以使用单引号 '、双引号 " 或反引号 ` 来表示
-
字符串长度:
- 可以使用
length属性获取字符串的长度。例如:"hello".length返回5。
- 可以使用
-
字符访问:
- 可以使用索引访问字符串中的单个字符。例如:
"hello"[0]返回"h"。 - 也可以使用
charAt()方法访问字符。例如:"hello".charAt(0)返回"h"。
- 可以使用索引访问字符串中的单个字符。例如:
-
字符串不可变:
- 字符串一旦创建,就无法被修改。任何字符串操作都会返回一个新的字符串。
-
字符串方法:
- JavaScript 提供了许多方法来操作字符串,如
toUpperCase()、toLowerCase()、concat()、slice()等。 - 这些方法都不会修改原始字符串,而是返回一个新的字符串。
- JavaScript 提供了许多方法来操作字符串,如
-
特殊字符:
- 字符串可以包含特殊字符,如换行符
\n、制表符\t等。 - 可以使用转义字符 `` 来表示特殊字符。
- 字符串可以包含特殊字符,如换行符
-
模板字符串:
- ES6 引入了模板字符串,使用反引号
`表示。 - 模板字符串支持插值表达式
${expression},可以方便地在字符串中嵌入变量或表达式的值。
- ES6 引入了模板字符串,使用反引号
Boolean
oolean 类型是最简单的数据类型之一,它只有两个可能的值:
-
true: 表示肯定或真值。 -
false: 表示否定或假值。 -
转换为布尔值:
- JavaScript 中,除了
false、0、''、null、undefined和NaN以外,其他所有值都会被转换为true。 - 可以使用
Boolean()函数来显式地将值转换为布尔值。
- JavaScript 中,除了
-
逻�ical运算符:
- JavaScript 提供了一些逻辑运算符,如
&&(AND)、||(OR) 和!(NOT),可以用于操作布尔值。 - 这些运算符遵循布尔代数的规则,可以用于条件判断和控制流程。
- JavaScript 提供了一些逻辑运算符,如
-
条件语句:
- 布尔值在条件语句(如
if-else、switch等)中非常有用,可以用于判断执行的逻辑分支。
- 布尔值在条件语句(如
-
布尔运算:
- 除了逻辑运算符,JavaScript 也支持比较运算符(如
<、>、<=、>=、==、===)的结果为布尔值。
- 除了逻辑运算符,JavaScript 也支持比较运算符(如
-
短路求值:
- 在使用
&&和||运算符时,JavaScript 会采用短路求值的机制,即一旦结果可以确定,就不会继续执行剩余的操作。
- 在使用
Undefined
undefined 是 JavaScript 中一个非常特殊的值,它表示一个变量未被赋值,或者对象属性不存在。
-
变量声明但未赋值:
- 当一个变量被声明但未被赋值时,它的值就是
undefined。例如:let x;中x的值就是undefined。
- 当一个变量被声明但未被赋值时,它的值就是
-
对象属性不存在:
- 当访问一个对象的不存在的属性时,该属性的值就是
undefined。例如:const obj = {}; obj.prop; // 返回 undefined。
- 当访问一个对象的不存在的属性时,该属性的值就是
-
函数返回值:
- 如果一个函数没有
return语句,或者return语句没有返回任何值,那么函数的返回值就是undefined。
- 如果一个函数没有
-
null与undefined的区别:null表示一个空值或无效值,而undefined表示一个未定义的值。null是一个有效的 JavaScript 值,而undefined是一个 JavaScript 类型。
-
判断
undefined:- 可以使用严格相等运算符
===来检查一个值是否为undefined。例如:x === undefined。 - 也可以使用
typeof运算符来检查一个值的类型是否为undefined。例如:typeof x === 'undefined'。
- 可以使用严格相等运算符
-
默认参数:
- ES6 引入了默认参数的概念,可以在函数定义时为参数指定默认值,以防止参数为
undefined。
- ES6 引入了默认参数的概念,可以在函数定义时为参数指定默认值,以防止参数为
null
null 是 JavaScript 中表示"空"或"无"的一个特殊值。它是一个有效的 JavaScript 值,与 undefined 有着明显的区别。
以下是一些关于 null 类型的重要特点:
-
表示空值:
null通常用于表示一个变量没有值,或者一个对象属性没有值。
-
类型判断:
- 使用
typeof运算符检查null的类型会返回"object"。这是 JavaScript 中一个众所周知的错误。 - 可以使用严格相等运算符
===来准确地判断一个值是否为null。例如:x === null。
- 使用
-
逻辑运算:
- 在逻辑运算中,
null被视为false。 - 在使用
==运算符进行比较时,null与undefined是相等的。 - 但是使用
===,运算符时是不相等的
- 在逻辑运算中,
-
数值运算:
- 当
null参与数值运算时,它会被转换为0。例如:null + 5会得到5。
- 当
-
默认值:
- 在函数参数中,如果不传入任何值,参数的默认值通常被设置为
null,表示该参数没有值。
- 在函数参数中,如果不传入任何值,参数的默认值通常被设置为
Symbol
Symbol 是 ES6 (ECMAScript 2015) 引入的一种新的原始数据类型。它用于创建唯一的、不可变的标识符。
-
唯一性:
- 每个通过
Symbol()函数创建的Symbol值都是唯一的,即使它们的描述相同。 - 这使得
Symbol非常适合用作对象属性的键,可以避免属性名称的冲突。
- 每个通过
-
可选描述:
- 创建
Symbol时可以提供一个可选的字符串描述,但这个描述只作为调试时的辅助信息,并不是Symbol值的一部分。
- 创建
-
全局 Symbol 注册表:
- 通过
Symbol.for()方法,可以在全局Symbol注册表中创建或获取Symbol。 - 这样可以确保多个代码片段使用同一个
Symbol值。
- 通过
-
隐藏属性:
- 由于
Symbol值是唯一的,因此可以用作对象的属性名,以创建隐藏的、不可枚举的属性。
- 由于
-
类型检查:
- 使用
typeof运算符检查一个值的类型时,Symbol类型会返回"symbol"。
- 使用
-
内置 Symbol:
- JavaScript 预定义了一些特殊用途的
Symbol,如Symbol.iterator、Symbol.hasInstance等,用于实现语言内部的行为。
- JavaScript 预定义了一些特殊用途的
BigInt
BigInt 是 ES2020 引入的一种新的数字类型,它可以表示任意大小的整数,解决了 JavaScript 中 Number 类型只能安全表示 53 位整数的限制。
-
无限精度整数:
BigInt可以表示任意大小的整数,包括非常大的数字和非常小的数字。- 它不受
Number类型 53 位整数限制的影响。
-
创建
BigInt:- 可以在整数字面量后添加
n后缀来创建BigInt值,如123n。 - 也可以使用
BigInt()函数将其他数值转换为BigInt。
- 可以在整数字面量后添加
-
运算和比较:
BigInt可以参与加减乘除等数学运算,结果也是BigInt类型。BigInt可以与其他BigInt进行比较,但不能与Number类型直接比较。
-
类型检查:
- 使用
typeof运算符检查BigInt类型会返回"bigint"。
- 使用
-
局限性:
BigInt不能用于位运算、Math 对象的方法,也不能与Number类型混用。- JSON 序列化时
BigInt会被转换为字符串。
引用类型
引用类型是一种复合数据类型,它们存储的是对内存中对象的引用,而不是直接存储值
主要的引用类型包括:
-
Object 类型:
Object是 JavaScript 中最基本的引用类型,用于创建复杂的数据结构。- 对象可以包含属性和方法,属性值可以是任意数据类型。
-
Array 类型:
Array是一种特殊的Object类型,用于存储有序的数据集合。- 数组中的元素可以是任意数据类型,包括其他对象和数组。
-
Function 类型:
Function也是一种特殊的Object类型,用于封装可重用的代码块。- 函数是 JavaScript 中的一等公民,可以作为参数传递、作为返回值、存储在变量中等。
-
Date 类型:
Date类型用于表示日期和时间信息。- 可以使用
new Date()创建Date对象,并提供各种方法操作日期和时间。
-
RegExp 类型:
RegExp类型用于表示正则表达式,用于文本匹配和处理。- 可以使用字面量语法
/pattern/flags或new RegExp()创建正则表达式对象。
总结
本文将带领大家系统地探讨JavaScript中的数据类型,包括基本数据类型和引用数据类型的特征
希望对你有所帮助!!!!!!