JS高程之基本类型和引用类型

连着更新连我自己都惊了!!!∑(゚Д゚ノ)ノ,嘛一点一点积累这来吧,虽然这块之前早就看过了。不过像这种基础理论知识还是的好。就算自己平时用不到,但保不准哪天换工作了面试会问到。所以老规矩在复习复习。

基本类型

  • 基本类型指的是简单的数据段。String、 Boolean、Number、Symbol、Undefined以上几个类型都属于基本类型。
  • 可以用typeOf能判断出具体是什么类型,null除外(null用type检测会是object)。
  • 不能给基本类型的值添加属性。(虽然不会报错但是给她一个属性访问结果会是 undefined)
  • 一个变量到另一个变量赋值的时候,会复制一个新值,然后把这个值分配给另一个变量。

引用类型

引用类型指的是简单的数据段。是保存在内存中的对象,JS不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间。在操作对象时,实际上是在操作对象的引用而不是实际的对象。为此,引用类型是按照引用访问的·

  • 当一个变量赋值给另一个变量时,也会复制一份新的给另一个变量,不过此时复制的只是个指针(指向储存在堆中的一个对象)。复制操作结束后两个变量实际上引用的是一个变量,因此改变其中一个另一个也会随之改变。

区别

传值与传址

  • 基本类型就像一个富人,你想要富人手里的乐吧薯片。人家说自己还不够吃呢。然后反手给你买了个一样口味的薯片。现在你们俩的薯片是相对独立的。他吃没了不代表你的薯片也没了
  • 引用类型就像一个穷人,你还是想吃它的薯片。因为他穷没钱给你买新的,所以你俩只能吃同一包。如果他(你)把薯片吃没了,那就是真的没了

    存储位置

  • 基本类型是个富人肯定要住在大高楼里,所以我们说基本类型是存储在栈内存中的。
  • 引用类型是个穷人所以只能扎堆的住平房棚子,所以我们说基本类型是存储在堆内存中。

    参数传递

    ECMAScript 中所有的函数参数都是按值传递。也就是说把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样。基本类型的传递和基本类型的变量一样的复制一样,而引用类型类型的值传递则如同引用类型变量的复制一样。下面两个例子:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // 基本类型参数传递
    let count = 20
    let result = add (count)
    function add (num) {
    num+=10
    return num
    }
    console.log(count) // 并没有被影响还是输出 20
    console.log(result)
1
2
3
4
5
6
7
8
9
let superMan = new Object
console.log(superMan.name) // 此时还是 undefined
let superManName = name(superMan)
function name(man) {
man.name = 'xnnnnn'
return man.name
}
console.log(superMan.name) // 因为name函数已经调用完毕了,所以此时输出xnnnnn
console.log(superManName)

感谢您的阅读。 🙏