js的數據存儲機制和數據類型


數據類型

基本數據類型 String、Number、Bool、undefined和null
引用數據類型 Object(Array,Function,RegExp等)

2種數據類型的存儲位置是不同的,基本數據類型存儲在棧(stack)中,引用數據類型存儲在堆(heap)中。

棧和堆的區別在於:heap是沒有結構的,數據可以任意存放,heap用於為復雜數據類型(引用類型)分配空間,例如數組對象、object對象;stack是有結構的,每個區塊按照一定次序存放(后進先出),stack中主要存放一些基本類型的變量和對象的引用,存在棧中的數據大小與生存期必須是確定的。可以明確知道每個區塊的大小,因此,stack的尋址速度要快於heap。

對於引用數據類型,在棧中存儲了指針,該指針指向堆中具體的對象。當解釋器尋找引用值時,會首先檢索其在棧中的地址,取得地址后從堆中獲得對象實體

數據類型檢測

1. typeof a    檢測基本數據類型:String , Number , Bool , Undefined

注:null的意義是 空對象指針,采用typeof檢測會返回 object。

2. a  Instanceof  Array     檢測引用類型,但是僅能判斷是否是對象的實例,並不能准確判斷究竟是哪種數據類型。
3. Object.prototype.toString.call(a)      准備判斷傳入參數的數據類型

null 與 undefined 的區別

Null:空對象指針,定義一個 將來 用於 保存對象 的變量,最好將該變量初始化為 null.
例如 var o = null; 說明o這個變量是要用來保存對象類型的數據的,執行typeof o會返回’object’,那么只要檢查null的值就可以判斷出該變量是否已經保存了一個對象的引用。在實際開發工作中,經常用到
例如:if ( goods != null ) { // 對goods對象執行相應操作 }

Undefined : 使用var聲明一個變量但未初始化其值,該變量的值默認取得undefined,使用typeof檢測聲明但未初始化的變量,返回undefined
例如 var a; console.log( typeof a ) // undefined

區別和聯系:
undefined值派生自null值,因此使用不全等操作 undefined == null,返回true;
二者用途不同,不建議將一個變量顯式的設置為undefined,比如var a = undefined,聲明但未初始化默認會賦值為undefined;但對於null,只要意在保存對象的變量還沒有真正保存為對象,就應該明確的讓該變量保存為null值,這體現了null作為空對象指針的意義,且利於區分undefined和null。
執行undefined === null 返回false,全等’===’操作符的判斷,基於typeof檢測到的數據類型,而typeof undefined返回undefined,typeof null返回object。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM