JS中數據類型之間的區別

JS中分爲兩個數據類型,分別爲基本數據類型和引用數據類型,那麼他們之間有什麼區別

1.什麼是堆棧內存

堆棧內存就是在計算機內存中分配出來的一塊空間,用於執行和存儲代碼

2.代碼在瀏覽器中的運行機制

  • 在瀏覽器中打開頁面的時候,瀏覽器引擎會渲染相關的代碼,換句話說,就是把代碼從上而下的執行
  • 瀏覽器執行代碼時,會提供一個供代碼執行的環境,就是棧內存
  • 最開始執行的是全局下的代碼,這時會形成一個全局執行上下文,在棧內存中執行全局的代碼
  • 在全局的執行上下文中有一個全局變量對象,可以把代碼中定義的變量和對應的值存儲進來
    如下圖就是這樣的結構
    在這裏插入圖片描述

3.定義基本數據類型步驟

let a = 12 爲例 (注意下面的步驟是let一個變量的步驟,var會和let有些區別,這就涉及到後面的變量提升等問題,後期會有專門的的博文來講述,現在是重點理解基本數據類型與引用數據類型的區別)

  • 先創建一個值12 ,因爲他是基本數據類型,結構比較簡單,因此直接把它存儲在棧內存中
  • 創建一個變量a,
  • 讓創建的變量a和值12,進行關聯,即賦值操作(‘=’ 賦值操作,將等號右邊的 結果 賦值給左邊)

4.定義引用數據類型步驟

let obj = {} 爲例

  • 創建值
    • 因爲是引用數據類型,會開闢一個堆內存,每一個堆內存都有一個16進制的地址
    • 把對象中的鍵值對分別存儲到堆內存中
    • 把堆內存的地址返回給棧內存,用來後期供變量的引用
  • 創建變量obj
  • 讓變量和之前創建的堆內存的地址進行關聯

5.基本數據類型與引用數據類型的區別

通過上方定義變量的步驟,可以感受出來,這兩者之間還是有很大的區別

  • 基本數據類型:操作的是值,並且值存儲在棧內存中
  • 引用數據類型:操作的是堆內存的引用地址,並且會把對象中的鍵值對放在堆內存中

6.棧內存與堆內存的作用

  • 棧內存:
    • 供代碼自上而下的執行
    • 存儲基本數據類型值
  • 堆內存:
    • 存儲引用數據類型的值

7.代碼中找到這兩者數據類型之間的不同

基本數據類型題目:

let a = 12;
let b = a;
b = 13;
console.log(a);

講解:
基本數據類型按值操作,因此當另一個值發生改變時,並不會影響另一個值;
在這裏插入圖片描述
引用數據類型題目:

let n = {
  name:'li'
};
let m = n;
m.name = 'ming';
console.log(n.name);

講解:
操作的是地址,因此指向這個地址的一個變量發生改變,都會改變在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章