JS基礎類型和引用類型


首先我們知道JS數據類型分為基礎類型引用類型,接下來我們談談基礎類型和引用類型的區別:

1.es5中基礎類型包括:number,string,null,undefined,Boolean。es6新增了一種基礎類型symbol,基礎類型的存儲是存放在中,原因是基礎類型存儲的空間很小,存放在棧(stack)中方便查找,且不易於改變

示例:

  var a = 10;

  var b = a;

  b = 20;

  console.log(a); // 10值

 

2. 引用類型是指有多個值構成的對象,也就是對象類型比如:Object,Array,Function,Data等,js的引用數據類型是存儲在中(heap),也就是說存儲的變量處的值是一個指針(point),指向存儲對象的內存地址。存在堆中的原因是:引用值的大小會改變,所以不能放在棧中,否則會降低變量查詢的速度

var obj1 = new Object();

  var obj2 = obj1;

  obj2.name = "我有名字了";

  console.log(obj1.name); // 我有名字了

3. 不同的內存分配機制導致了不同的訪問機制,js中不允許直接訪問保存在堆內存中的對象,所以在訪問一個對象時,首先得到這個對象在堆內存中的地址,然后在按照這個地址去獲取對象中的值,這就是按引用訪問,基礎類型則可以直接訪問到

4. 參數傳遞的不同(實參復制給形參的過程),首先我們知道所有函數都是按值來傳遞的,傳參不同也就是內存分配不同的原因,當我們把變量賦值給參數的時候,參數的改變和變量沒有關系,當我們把引用類型傳遞給參數的時候,此時我們傳遞的是引用類型的地址,所有當參數在函數內部改變的時候,會出現修改了函數外面值的情況


免責聲明!

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



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