JS從入門到放棄 基本型別和引用型別

2021-09-17 21:51:41 字數 2589 閱讀 2548

js有number,string,null,undefined,boolean,array,object七種資料型別,而js的變數,根據指向資料型別的不同,也分為兩種型別,一種基本型別,一種引用型別.

1. 基本型別

基本型別包括: number, string, null, undefined, boolean這五種.但凡變數指向這五種資料型別的都稱之為基本型別.

var test1 = 'hahaha'; // string

var test2 = 1; // number

var test3 = true; // boolean

假設有以上變數,那麼他們在記憶體中棧區的儲存結構大概是這樣子的.

棧區指標

棧區值test1

hahaha

test2

1test3

true

var test = '321';

var test = '123';

var test1 = test;

console.log(test === test1); // true

執行以上語句之後,你可能會覺得變數test的值從字串'321'變成了字串'123'.並不是值改變了,而是test只是乙個指標,上面的兩條語句都只是在為同乙個指標指向不同的值而已.值是不可被改變的.執行第三條語句的時候,首先初始化乙個test1變數,然後把test的變數賦值給test1.這種賦值稱為深拷貝.如圖:指標值

test

'123'

test1

'123'

最後一條語句之間的比較其實是testtest1之間的值作比較.也就是console.log('123' === '123'),之所以多此一舉的解釋最後兩條語句,原因是因為引用型別的賦值和比較並不是如此.

2. 引用型別

引用型別包括: object和array這兩種.但凡變數指向這兩種資料型別的都稱之為引用型別.

var china = ;

var huabei = ;

假設有以上變數,那麼他們在記憶體中棧區堆區的儲存結構大概是這樣子的.

棧區指標

棧區值china

china物件在堆區的記憶體位址

huabei

huabei物件在堆區的記憶體位址

堆區位址

堆區值china物件在堆區的記憶體位址

china物件

huabei物件在堆區的記憶體位址

huabei物件

china.handan = '邯鄲';

console.log(china.handan); // '邯鄲'

當我們繼續執行上面語句的時候china堆區值內部的屬性除了原有的tianjinbeijing之外又動態的新增了乙個handan屬性.這說明引用型別的值是可以被改變的.

console.log(china === huabei);  // false
china物件和huabei物件內的屬性明明一樣,但是完全相等比較符卻返回了false.這進一步證明了引用型別的比較是比較兩者在堆區的位址是否相同.如果我們對兩個物件的內部的屬性進行比較呢.

console.log(china.tianjin === huabei.tianjin) // true
這裡又會返回true,這是因為我們做比較的物件的屬性是基本型別.他們會比較內部的值,而不是比較兩者在堆區內的位址.

最後說一下引用型別的賦值.繼續上面的**

var asia = china;

asia.tianjin = '紅橋';

console.log(asia.tianjin); // 紅橋

console.log(china.tianjin); // 紅橋

執行上面語句你會發現明明改變的是asia的屬性,但是china的屬性也跟著改變了.這是因為賦給asia的值是china物件在堆區的記憶體位址,而不是china物件本身.兩者實際上指向同乙個堆區物件.也因此,改變其中任何乙個的屬性,另外乙個也會隨之更改.這種賦值也稱之為淺拷貝.

棧區指標

棧區值china

china物件在堆區的記憶體位址

asia

china物件在堆區的記憶體位址

堆區位址

堆區值china物件在堆區的記憶體位址

china物件

總結基本型別:值不可變,存放於棧區,相互比較是基於值進行比較,相互賦值是深拷貝賦值.

引用型別:值可改變,同時存放於棧區和堆區,相互比較是基於在堆區內的位址,相互賦值是淺拷貝.

js 引用型別和基本型別

js中的資料型別有以下幾種 基本型別 number boolean string undefined null symbol 引用型別 object array,function,date,正則物件,json物件 基本型別的資料是存放在棧記憶體中的,而引用型別的資料是存放在堆記憶體中的 複製變數值 ...

js 引用型別和基本型別

js中的資料型別有以下幾種 number boolean undefined object function string null 基本型別 number boolean string undefined null 引用型別 object function 基本型別的資料是存放在棧記憶體中的,而引...

js 基本型別 引用型別

1 基本的資料型別有 undefined,boolean,number,string,null.基本型別的訪問是按值訪問的,就是說你可以操作儲存在變數中的實際的值 基本型別的比較是值的比較。用 比較兩個不同型別的變數時會進行一些型別轉換。但是當兩個值的型別相同的時候,即使是 也相當於是 基本型別的變...