数据类型
本文主要介绍JavaScript中的数据类型
01. 数据类型
-
整体上可分为原始类型和引用类型
- 原始类型(或者说基本数据类型)包括7种数据类型:
Number、String、Boolean、Symbol、BigInt、Null、Undefined - 引用类型就是:
Object
- 原始类型(或者说基本数据类型)包括7种数据类型:
-
原始类型和引用类型的区别是什么?
-
大体上来说,原始类型的数据保存在栈内存中
-
而引用类型的数据保存在堆内存中,同时会在栈中存储一个指针(地址),这个指针指向堆内存中的数据
这里对于堆栈不展开讲 -
(1)Number类型
-
Number类型使用
IEEE 754格式来表示整数和浮点数- 所以在进行浮点数的计算时,会有精度误差
-
表示数字:
- 十进制数,直接写:
num = 10 - 八进制,第一个数字必须为
0:num = 0123 - 十六进制,添加前缀
0x:num = 0x1f - 浮点数,必须包含小数点,且小数点后有数字:
num = 1.2 - 科学记数法,在数值后跟一个字母
e,然后加上一个要乘的10的幂:max = 3e10、min = 3.1e-10
- 十进制数,直接写:
-
特别的:
-
JS中最大值用
Number.MAX_VALUE表示,最小值用Number.MIN_VALUE表示 -
如果超出这个范围,会被转换为
Infinity、-Infinity -
一个特殊值,用来表示不是一个数值:
NaN——Not a NumberNaN不等于任何值,包括它自身- 可以用
isNaN()方法来判断一个数值是否是NaN
-
0有两种表示方法:+0、-0
console.log(+0 === -0) // true console.log(1 / +0) // +Infinity console.log(1 / -0) // -Infinity console.log(0 / 0) // NaN console.log(NaN == NaN) // false console.log(isNaN(NaN)) // true -
(2)String类型
-
String类型可以用双引号
""、单引号''、反引号``表示let str1 = "a string" let str2 = 'a new string' let str3 = `a string too`
- 字符串不可变,一旦被创建就不能被修改,所有对字符串的修改都会销毁原字符串,并返回一个新字符串
(3)Boolean类型
- 布尔类型是一个逻辑实体,只有两个值:
true | false
(4)Symbol类型
-
Symbol类型(符号类型)可以用来表示一个唯一、不可修改的值
- 可以用于确保对象属性使用唯一标识符,不会发生属性冲突
- Symbol不可被枚举,只能通过
Object.getOwnPropertySymbols()
-
用法:(用一个变量存储Symbol值,然后使用该变量,通常用作对象中的键)
- 使用
Symbol()函数进行初始化
const foo = Symbol(); // 因为不可变,可以直接使用 const 定义变量 const bar = Symbol(); console.log(foo == bar) // false ,每个Symbol都是唯一的值 let obj = {} obj[foo] = 1 obj[bar] = 2 console.log(obj) // {Symbol(): 1, Symbol(): 2} // Symbol不可被枚举,只能通过 Object.getOwnPropertySymbols() Object.keys(obj) // [] Object.values(obj) // [] Object.getOwnPropertyNames(obj) // [] - 使用
(5)BigInt类型
-
BigInt类型可以表示任意大的整数,它可以超过数字的安全整数限制
-
在数值后面加上一个
n,或者通过BigInt()函数- 对 BigInt 的所有操作,返回的结果也是 BigInt
- 但不能混合使用BigInt类型和Number类型
let num1 = 123456789n let num2 = BigInt(123456789) console.log(num1 == num2) // true
(6)Null类型
- Null类型只有一个值
null,表示一个空对象指针
(7)Undefined类型
-
Undefined类型只有一个值
undefined,表示未被赋值(初始化)的变量- 变量定义了未赋值,默认为
undefined,但不用显式的赋值为undefined - 函数没有返回值,默认返回
undefined
- 变量定义了未赋值,默认为
(8)Object类型
-
Object类型就是一组键值对的集合
- 键(
key):或者说属性名,是一个字符串,或者Symbol - 值(
value):或者说属性值,可以是任意类型的值
let obj1 = { name: 'Ruovan', age: 24 } let obj2 = new Object({ name: 'Ruovan', age: 24 }) - 键(
本人前端小菜鸡,如有不对请谅解