2025年06月25日
JavaScript之基础数据类型以及它们的区别
- JavaScript共有八种数据类型,分别是undefined,null,string,Number,Boolean,Object ,BigInt ,Symbol。
其中,BigInt 和 Symbol 是ES6 新增的数据类型。
BigInt是一种数字类型的数据,他可以表示任意精度格式的整数,可以安全的操作和存储大整数,即使这个数超过了Number的最大值。
Symbol代表创建后独一无二的不可变的数据类型,它主要为了解决可能出现的全局变量冲突的问题。个人理解是 Symbol申明的变量在内存中新开辟了一个内存区间,这样哪怕两个变量的值相同,但是他们的内存所在地址不同,在全等比较时也是返回false。 eg:let a=Symbol('a') ; let b=Symbol('a'); a===b ; //false 这里是两个不同的内存的引用比较,,所以返回false。eg: let a=Symbol('a') ; let b=a ; a===b, 这里返回 true,因为他们指向的是同一个内存地址。Symbol的特性感觉和object的内存属性一样,如果是新建对象,则新开辟一个内存空间,如果是赋值,则将内存空间的指向地址赋值给新变量。 - 接下讲其他的数据类型,可以分为基本数据类型(undefined ,null,string,Number,Boolean) 和引用数据类型(Object)。
两种数据类型的区别在于存储位置的不同:
1:基础数据类型的数据存储在栈中,所占用的空间小,大小固定,属于是被频繁使用的数据,所以存储在栈中。
2:引用数据类型存储在堆中,引用数据类型占用内存空间大,大小不固定,如果存储在栈中,可能会影响程序的运行。引用数据在栈中存储了指针,即指向这个引用类型的存储位置的地址信息。该指针指向了堆中这个引用类型的地址。当调用这个引用类型时,会现在栈中寻找这个指针,然后根据这个指针从堆中获取数据。 - 堆和栈的概念存在于数据结构和操作系统的内存中。在数据结构里面:
在数据结构中,栈中的数据是先进后出
堆是一个优先队列,是按优先级排序的,优先级是可以按照大小来排序的。 - 在操作系统中,内训被分为栈区 和 堆区:
栈区的内存是编译器自动分配释放,存放函数的变量值,局部变量值等,操作方式类似数据结构的栈。
堆区的内存一般由开发者分配释放,如果开发者不释放,程序结束后可能被垃圾回收装置回收。
- 上面讲过string是一个基础数据类型,按上述应该是存放在栈中,但是实际呢?字符串是存在堆里,栈中为引用地址,如果存在相同字符串,则引用地址相同。
以上是结合所查到的资料的个人理解,如有错误请指正。
标签:js构造函数和函数的区别