数据类型
- 基础类型
- undefined
- Null
- Boolean
- String
- Number
- Symbol
- BigInt
- 引用类型
- Object
Object分为Array(数组对象), RegExp(正则对象), Date(日期对象), Math(数学函数), Function(函数对象)
Symbol
- 什么是Symbol类型?
Symbol是ES6中新赠的一个基本数据类型,Symbol值通过Symbol函数生成,表示独一无二的值。
// 声明一个Symbol类型的值
let tao = Symbol('wyt')
console.log(tao) // Symbol(wyt)
console.log(typeof tao) // "symbol"
- Symbol类型在对象中的使用
// Symbol类型在对象中的使用1
let tao = Symbol('wyt')
let obj = {}
obj[tao] = "wyt"; // Symbol值的属性不能用点添加符
console.log(obj[tao]) // "wyt"
// Symbol类型在对象中的使用2
let tao = Symbol('wyt')
let obj = {
[tao]: "wyt"
}
console.log(obj) // {Symbol(wyt): "wyt"}
- Symbol类型是不可被枚举的
对象中的Symbol属性不会被for...in...遍历,并且不会被Object.keys(obj),Object.values(obj),Object.getOwnPropertyNames(obj)返回。
let tao = Symbol('wyt')
let obj = {
other: "hello",
[tao]: "wyt"
}
for (let key in obj) {
console.log(key) // "other"
}
console.log(Object.keys(obj)) // ["other"]
console.log(Object.values(obj)) // ["hello"]
console.log(Object.getOwnPropertyNames(obj)) // ["other"]
- 可以通过Object.getOwnPropertySymbols()和Reflect.ownKeys()获取
let tao = Symbol('wyt')
let obj = {
other: "hello",
[tao]: "wyt"
}
console.log(Object.getOwnPropertySymbols(obj)) // [Symbol(wyt)]
console.log(Reflect.ownKeys(obj)) // ["other", Symbol(wyt)]
// Reflect.ownKeys()返回所有属性key(包括不可枚举的属性)
bigInt
- 什么是BigInt类型
Number类型可以精确表示的最大整数是2^53,而BigInt可以表示任意大的整数
- 如何声明一个BigInt类型的值
let val1 = 10n
let val2 = BigInt(10)
console.log(val1 === val2) // true
console.log(typeof val1) // bigint
console.log(Object.prototype.toString.call(val2)) // [object BigInt]
引用类型与基础类型的区别
- 基础类型存储在==栈内存==中,被引用或拷贝时,会创建一个完全相等的变量。
- 引用类型存储在==堆内存==,存储的是地址,多个引用指向同一个地址,可以导致数据共享。(引用类型的指针存储在栈内存中)
==栈内存==会自动分配内存空间,自动释放,是一个线性结构,后进先出,便于管理
==堆内存==动态分配内存,大小不定也不会自动释放。