JS个人学习(1)——数据类型

212 阅读2分钟

数据类型

  1. 基础类型
  • undefined
  • Null
  • Boolean
  • String
  • Number
  • Symbol
  • BigInt
  1. 引用类型
  • Object

Object分为Array(数组对象), RegExp(正则对象), Date(日期对象), Math(数学函数), Function(函数对象)

Symbol

  1. 什么是Symbol类型?

Symbol是ES6中新赠的一个基本数据类型,Symbol值通过Symbol函数生成,表示独一无二的值。

// 声明一个Symbol类型的值
let tao = Symbol('wyt')
console.log(tao) // Symbol(wyt)
console.log(typeof tao) // "symbol"
  1. 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"}
  1. 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"]
  1. 可以通过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

  1. 什么是BigInt类型

Number类型可以精确表示的最大整数是2^53,而BigInt可以表示任意大的整数

  1. 如何声明一个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]

引用类型与基础类型的区别

  1. 基础类型存储在==栈内存==中,被引用或拷贝时,会创建一个完全相等的变量。
  2. 引用类型存储在==堆内存==,存储的是地址,多个引用指向同一个地址,可以导致数据共享。(引用类型的指针存储在栈内存中)

==栈内存==会自动分配内存空间,自动释放,是一个线性结构,后进先出,便于管理

==堆内存==动态分配内存,大小不定也不会自动释放。

image