在javaScript中,數據類型整體上可以分為兩大類:基本數據類型和引用數據類型
基本數據類型:
string , symbol , number , boolean , undefined , null
引用數據類型:
object
1.簡單值(原始值)
? ? ? ? 由于簡單值的數據大小是固定的,所以簡單值的數據是存儲于內存中的棧區里面的
? ? ? ? 這里面null比較特殊,打印出來是object,這是由于歷史原因所遺留下來的問題
? ? ? ? 具體原因是因為不同的對象在底層都表現為二進制,在JavaScript中二進制前三位都為0的話就會被判斷為object類型,null的二進制全部為0,自然前三位也是0,所以執行typeof值會返回object
? ? ? ? 例外,當我們打印 null == undefined 的時候,返回的是true
? ? ? ? 這兩個值都表示“無”的意思
????????通常情況下,當我們試圖訪問某個不存在的或者沒有賦值的變量時,就會得到一個undefined值,JavaScript會自動將聲明是沒有進行初始化的變量設為undefined
? ? ? ? 區分
? ? ? ? ? ? ? ? null是一個表示“無”的對象(空對象指針) , 轉為數值時為0
? ? ? ? ? ? ? ? 典型用法是:
? ? ? ? ? ? ? ? ? ? ? ? 作為函數的參數,表示該函數的參數不是對象
? ? ? ? ? ? ? ? ? ? ? ? 作為對象原型鏈的終點
? ? ? ? ? ? ? ? undefined是一個表示“無”的原始值,轉為數值時為NaN
? ? ? ? ? ? ? ? 典型用法是:
? ? ? ? ? ? ? ? ? ? ? ? 變量被聲明了,但沒有賦值時,就等于undefined
? ? ? ? ? ? ? ? ? ? ? ? 調用函數時,應該提供的參數沒有提供,該參數就等于undefined
? ? ? ? ? ? ? ? ? ? ? ? 對象沒有賦值的屬性,該屬性的值為undefined
? ? ? ? ? ? ? ? ? ? ? ? 函數沒有返回值時,默認返回undefined
2.復雜值
? ? ? ? 數組,對象 。。。
3.訪問方式
? ? ? ? 1.按值訪問
? ? ? ? ? ? ? ? 簡單值是作為不可細化的值進行存儲和使用的,引用它們會轉移其值
? ? ? ? 2.引用訪問
? ? ? ? ? ? ? ? 復雜值是通過引用進行存儲和操作的,而不是實際的值,創建一個包含復雜對象的變量時,其值是內存中的一個引用地址。引用一個復雜對象時,使用它的名稱(即變量或對象屬性)通過內存中的引用地址獲取該對象值
4.比較方式
? ? ? ? 簡單值采用值比較,而復雜值采用引用比較,復雜值只有在引用相同的對象(即有相同的地址)時才相等,即使是包含相同對象的兩個變量也彼此不相等,因為它們并不指向同一個對象
var a = 10
var b = 10
console.log(a === b) // truevar a = [1,2,3]
var b = [1,2,3]
console.log(a === b) // false
5.動態屬性
? ? ? ? 對于復雜值,可以為其添加屬性和方法,也可以改變和刪除其屬性和方法,但簡單值不可以
6.變量賦值
? ? ? ? 直接賦值
? ? ? ? ? ? ? ? 將簡單值賦值給變量
? ? ? ? 引用賦值
? ? ? ? ? ? ? ? 將一個復雜值的引用賦值給變量,這個引用指向堆區實際存在的數據