js 中的值型別和引用型別

2022-09-20 13:42:09 字數 1497 閱讀 4365

j**ascript中值型別(基本型別):number,string,bool,undefined,null(這5種基本資料型別是按值訪問的,因為可以操作儲存在變數中的實際的值)

引用型別:物件(object)、陣列(array)、函式(function)

2.值型別和引用型別的區別

(1)值型別:

1、占用空間固定,儲存在棧中(當乙個方法執行時,每個方法都會建立自己的記憶體棧,在這個方法內定義的變數將會逐個放入這塊棧記憶體裡,隨著方法的執行結束,這個方法的記憶體棧也將自然銷毀了。因此,所有在方法中定義的變數都是放在棧記憶體中的;棧中儲存的是基礎變數以及一些物件的引用變數,基礎變數的值是儲存在棧中,而引用變數儲存在棧中的是指向堆中的陣列或者物件的位址,這就是為何修改引用型別總會影響到其他指向這個位址的引用變數。)

2、儲存與複製的是值本身

3、使用typeof檢測資料的型別

4、基本型別資料是值型別

(2)引用型別:

1、占用空間不固定,儲存在堆中(當我們在程式中建立乙個物件時,這個物件將被儲存到執行時資料區中,以便反覆利用(因為物件的建立成本通常較大),這個執行時資料區就是堆記憶體。堆記憶體中的物件不會隨方法的結束而銷毀,即使方法結束後,這個物件還可能被另乙個引用變數所引用(方法的引數傳遞時很常見),則這個物件依然不會被銷毀,只有當乙個物件沒有任何引用變數引用它時,系統的垃圾**機制才會在核實的時候**它。)

2、儲存與複製的是指向物件的乙個指標

3、使用instanceof檢測資料型別

4、使用new()方法構造出的物件是引用型

複製物件在記憶體中的儲存情況,如下圖:

看**:

let obj=

let objcopy=obj;

console.log(objcopy==obj) //true

obj.id=2;

console.log(objcopy) //

console.log(objcopy==obj) //true

引用型別變數obj賦值給objcopy,變數obj中實際存放的是指標,資料在堆中的位址,賦值是將obj的引用也就是指標賦給objcopy,當通過變數修改資料,實際不影響變數指向的指標

引用型別變數中儲存的是指向實際資料所在的堆的指標,而不是實際的value。

值型別儲存的是實際的value,複製值型別變數,實際是將資料複製乙份存放在棧中另乙個位址空間

let a='hello'

let b=a;

console.log(b) // hello

a='hello world'

console.log(b) //hello

各自的修改互相獨立,互不影響

js中的值型別和引用型別的區別

1 值型別 基本型別 字串 string 數值 number 布林值 boolean undefined null 這5種基本資料型別是按值訪問的,因為可以操作儲存在變數中的實際的值 ecmascript 2016新增了一種基本資料型別 symbol 2 引用型別 物件 object 陣列 arra...

js高階 值型別和引用型別

什麼是引用型別?什麼是值型別?值型別 是指在記憶體棧中 直接儲存資料的本身 常見的資料型別 string,boolean,number,null,undefined 引用型別 是指在記憶體棧中儲存的是資料的記憶體位址 指向了堆中複雜的資料型別 值型別 儲存在棧中,儲存的是值得本身 var str a...

js中基礎型別和引用型別傳值問題

基本型別的資料是存放在棧記憶體中的,而引用型別的資料是存放在堆記憶體中的。基本型別的複製就是在棧記憶體中開闢出了乙個新的儲存區域用來儲存新的變數,這個變數有它自己的值,所以如果其中乙個的值改變,則不會影響到另乙個。var a 1 var b a b 4 console.log a,b 定義了乙個物件...