1. 程式人生 > 其它 >oracle中金額用什麼型別_javascript 中什麼是引用型別?

oracle中金額用什麼型別_javascript 中什麼是引用型別?

技術標籤:oracle中金額用什麼型別

如果問起前端中的資料型別大家應該能夠信手捏來,但是引用型別估計有一部分同學不知道是什麼。

js中的資料型別有以下幾種:

Number Boolean undefined Object Function String Null

基本型別:Number Boolean String undefined null

引用型別:Object Function

注意:基本型別的資料是存放在棧記憶體中的,而引用型別的資料是存放在堆記憶體中的

複製變數值  

  基本型別:

var a = 1;var b = a;a = 2;console.log(b)

執行結果:

a1d5dba52d0259203add8e85f3aaf0ae.png

也就是說,基本型別的複製就是在棧記憶體中開闢出了一個新的儲存區域用來儲存新的變數,這個變數有它自己的值,只不過和前面的值一樣,所以如果其中一個的值改變,則不會影響到另一個。

引用型別:

var a = { a:1 };var b = a;  a.a = 5; console.log(b)

執行結果:

31403f126de4a2d3709d8f071c774dcd.png

看到這,大家大概清晰了沒?

看到基礎型別和引用型別的區別了嗎?這就是堆和棧的區別。其實一句話總結,就是基礎型別是直接複製一份放到棧記憶體中,但是引用型別是隻有一份實際有效的值,但是a、b物件的指標都指向這份堆中資料,當a物件修改的時候,由於"老巢"(堆)中資料已經變動了,目前只是指標指向沒改變而已,所以b去引用這份資料的時候發現已經變成了5,也就是說聯動了。

接下來講講基礎型別的特殊點

基本型別的資料是沒有屬性和方法的,引用型別才會有,但是為什麼String型別卻又那麼多方法呢?

var string = "aaa";var string2 = string.substring(0));   //aaa

基本型別的確沒有方法和屬性,因為一旦建立了屬性或者方法就會被立刻銷燬,但是為了方便程式設計師對這類的基本型別資料比較方便的操作,在底層做了一些工作,其實這段程式碼相當於:

var string = new String("aaa");var string2 = string.substring(0);string = null;

(1)建立一個String型別的例項(使用 new 操作符建立的引用型別的例項,在執行流離開當前作用域之前都一直儲存在記憶體中。而自動建立的基本包裝型別的物件,則只存在於一

行程式碼的執行瞬間,然後立即被銷燬 )

(2)在例項上呼叫指定方法

(3)銷燬該例項

經過這三步,字串值就變得和物件一樣了,在Boolean Number中也是這樣

String Boolean Number 這三種類型也叫做 基本包裝型別

以上既是學習中的總結,也是以個人角度的理解和大家一起探討的過程,如果感興趣可以點選關注留言評論交流學習。