js的基本資料型別與引用資料型別

2022-05-19 11:43:22 字數 2874 閱讀 5248

/* 

基本資料型別有:

- string

- number

- boolean

- null ** typeof null === 'object' 這只是js的遺留問題,null仍歸屬於普通資料型別

- undefined

*/var string = 'good'

var number = 123

var boolean = true

var nu11 = null

var undef1ned = undefined

/* 陣列與物件都屬於object資料型別 */

var obj = {}

var arr =

var num = 123

var obj =

/* 普通資料型別的值傳遞 */

var num2 = num

console.log(num) // 123

console.log(num2) // 123

num++

console.log(num) // 124

console.log(num2) // 123

num2++

console.log(num) // 124

console.log(num2) //124

/* 通過以上簡單的嘗試可以看到:

普通資料型別的值傳遞,就像轉殖了乙份原資料,新舊資料之間完全獨立

它們的改變都不會影響到對方,這其實就是深拷貝

*//* 引用資料型別的值傳遞 */

var obj2 = obj

console.log(obj2.numinobj) // 456

obj.numinobj = 666

console.log(obj.numinobj) // 666

console.log(obj2.numinobj) // 666

obj.numinobj = 888

console.log(obj.numinobj) // 888

console.log(obj2.numinobj) // 888

/* 可以看到,引用資料型別的值傳遞,與普通型別的值傳遞大不同

引用資料型別的值傳遞的情況: 舊資料像是被人施加巫毒娃娃的效果

對巫毒娃娃的操作(新資料)也會作用到實體身上(舊資料),當然對舊資料

操作也會影響新資料

*/

通過以上的實驗,兩種資料型別的值傳遞情況是不一樣的,那麼導致這種結果的原因是啥呢?這裡直接引出概念堆記憶體棧記憶體

我們在js中宣告的所有變數,及變數所攜帶的資料都是存在記憶體中的,內存在內部分為堆記憶體棧記憶體,而不同資料型別是儲存在不同記憶體中的

基本資料型別的屬性與屬性值都是直接儲存在棧記憶體中的

普通資料型別的值傳遞,就像轉殖了乙份原資料,新舊資料之間完全獨立,它們的改變都不會影響到對方

引用資料型別,當然指的就是物件、陣列這些。它們的儲存就不是說單純的儲存在堆記憶體或者是棧記憶體中了,而是其屬性名儲存在棧記憶體中,屬性值儲存在堆記憶體中。此時有人就會想那怎麼能夠保持使得屬性名對應正確的屬性值呢?,答案就是,當我們申明乙個物件時,會在堆記憶體中開闢乙個區域,區域有標識屬於它的、唯一的記憶體位址值。往後物件的所有資料都會儲存在將這塊區域中,而在棧記憶體中的屬性名通過儲存這個記憶體位址值,就能正確找到物件和其中的資料了。

// 物件的字面量

引用資料型別的值傳遞的情況: 舊資料像是被人施加巫毒娃娃的效果對巫毒娃娃的操作(新資料)也會作用到實體身上(舊資料),當然對舊資料操作也會影響新資料,最主要的原因就是,它們都指向同一塊記憶體

// 物件的字面量

基本資料型別與引用資料型別

基本資料型別與引用資料型別 基本資料型別 基本資料型別 大小 範圍 預設值 int 整形 32 2147483648 2147483648 0 long 長整形 64 9233372036854477808 9233372036854477808 0 float 浮點形 32 3.40292347e...

基本資料型別與引用資料型別

byte short int long float double boolean charstring class sun提供的 system.class sun提供的 student.calss 程式設計師自定義的 user.class 程式設計師自定義的 product.class程式設計師自定...

基本資料型別與引用資料型別

在談深拷貝與淺拷貝之前,我們先來談談js的資料型別,這對接下來了解深拷貝淺拷貝起到一定的作用。棧記憶體棧是自動分配相對固定大小的記憶體空間,而且由系統自動釋放的。棧是線性結構,後進先出。基本資料型別 null undefined number string boolean symbol es6 基本...