【每日一题】JavaScript数据结构|JavaScript有哪些数据类型,它们的区别是什么?(值复制,函数传参)

86 阅读3分钟

【每日一题】JavaScript数据结构|JavaScript有哪些数据类型,它们的区别是什么?

  • JS共有八种数据类型,分别是undefined、null、boolean、number、string、object、Symbol、bigInt

    • 其中Symbol和bigInt是ES6中新增的数据类型:

      • Symbol是原始值,且符号实例是唯一的、不可变的。用途是确保对象属性使用唯一标识符,不会发生属性冲突的危险。
      • bigInt是一种数字类型的数据,他可以表示任意精度格式的整数,使用bigInt可以安全地存储和操作大整数,即使这个📖已经超出了number能够表示的安全整数范围。
    • 这些数据可以分为原始数据类型和引用数据类型:

      • 原始数据类型:undefined、null、boolean、number、string、symbol、bigInt

        • 原始数据类型是按值访问的,因为可以直接操作保存在变量中的实际值。它是存储在栈中的简单数据段,占据空间小,大小固定,属于被频繁使用数据。存储中栈中便于迅速查找变量的值。

        截屏2022-02-13 下午9.37.49.png

        • 在复制时,在将一个保存着原始值的变量复制给另一个变量时,会将原始值的副本赋值给新变量,此后这两个变量是完全独立的,他们只是拥有相同的value而已

        • 函数传参:只是把变量里的值传递给参数,之后参数和这个变量互不影响

      • 引用数据类型:object

        • 比如有:Obejct、Array、Function、Date等等

        • 引用数据类型是保存在堆内存里的对象,JS禁止直接访问堆内存空间中的位置和操作堆内存空间,只能操作对象在栈内存中的引用地址。因此,引用数据类型中栈内存中保存的实际上是对象中堆内存中的引用地址,通过这个引用地址可以快速查找到保存在堆内存中的对象。也就是说,引用数据类型事就是按引用访问的,在访问一个对象时,首先得到的是这个对象在堆内存中的地址,然后在按照这个地址去获得这个对象的值。

        截屏2022-02-13 下午9.37.55.png

        • 引用数据类型是存储在堆中的对象,存储中变量处的值是一个指针,这个指针会指向存储中堆内存中的对象的内存地址。这是由于引用数据类型占据空间大,大小不固定。如果直接存储在栈中,会影响到程序的性能。

        • 在复制时,引用值:在将一个保存着对象内存地址的变量复制给另一个变量时,会把这个内存地址赋值给新变量,也就是说这两个变量都指向了堆内存中的同一个对象,他们中任何一个作出的改变都会反映在另一个身上。

        • 函数传参:JS中的所有的参数传递都是值传递,不可能通过引用传递参数。因此当传入的参数是引用数据类型时,实际上传入的参数是该对象的引用的拷贝,一开始形参和原本对象保存是在同一个引用地址,因此改变形参属性的值,原本对象也会改变,但如果给形参赋予一个新的值,那么就不会跟原本对象有关联了。

\