1. 程式人生 > >JS中基本型別和引用型別分別指的的是什麼?有何區別?

JS中基本型別和引用型別分別指的的是什麼?有何區別?

這裡是修真院前端小課堂,每篇分享文從

【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴充套件思考】【更多討論】【參考文獻】

八個方面深度解析前端知識/技能,本篇分享的是:

【JS中基本型別和引用型別分別指的的是什麼?有何區別?    】

1.背景介紹

基本資料型別:按值訪問,可操作儲存在變數中的實際的值。基本型別值指的是簡單的資料段。

 

基本資料型別有這五種:Undefined、Null、String、Number、Boolean。

 

引用型別:當複製儲存著物件的某個變數時,操作的是物件的引用,但在為物件新增屬性時,操作的是實際的物件。引用型別值指那些可能為多個值構成的物件。引用型別值指那些可能為多個值構成的物件。

 

引用型別有這幾種:object、Array、RegExp、Date、Function、特殊的基本包裝型別(String、Number、Boolean)以及單體內建物件(Global、Math)。

 

2.知識剖析

1.Number

 

Number型別包含整數和浮點數(浮點數數值必須包含一個小數點,且小數點後面至少有一位數字)兩種值。

NaN:非數字型別。兩大特點:1.涉及到的 任何關於NaN的操作,都會返回NaN。2. NaN不等於自身。

 

isNaN() 函式用於檢查其引數是否是非數字值

 

2.String

 

字串是儲存字元的變數,由雙引號(" ")或單引號(' ')表示

字串有length屬性。可以取得字串的長度。

 

字串轉換:轉型函式String(),適用於任何資料型別(null,undefined 轉換後為null和undefined);toString()方法(null,undefined沒有toString()方法)。

 

3.Boolean

 

只有兩個值,true和false;在運算中true=1,false=0。

 

4.Undefined

 

只有一個值,即undefined值。使用var聲明瞭變數,但未給變數初始化值,那麼這個變數的值就是undefined。

 

5.Null

 

也是隻有一個值的資料型別,null值表示一個空物件指標,使用typeof操作符檢測null值會返回"object"

 

6.常見的引用型別

 

Object型別:帶有屬性和方法的特殊資料型別。

Array:是使用單獨的變數名來儲存一系列的值。

 

Function:函式型別在JavaScript中也是物件。

 

7.基本型別和引用型別的區別

 

基本型別的變數是存放在棧區的(棧區指記憶體裡的棧記憶體);

引用型別的值是同時儲存在棧記憶體和堆記憶體中的物件;

基本型別的比較是值的比較;

引用型別的比較是引用的比較;

 

 

3.常見問題

見2.知識剖析

 

4.解決方案

見2.知識剖析

 

5.編碼實戰

 

<script>

var name = '內門弟子';

var num = 1000;

var newName = name;

var newNum = num;

// console.log(newName);

// console.log(newNum);

name = '修仙弟子';

num = 500;

console.log(newName);

console.log(newNum);


 

var obj = [1, 2, '三'];

// var obj = {name:'內門弟子' ,num : 1000};

var newObj = obj;

obj[0] = 4;

console.log(obj);

console.log(newObj);

 

</script>


 

 

6.擴充套件思考

 

見2.知識剖析

 

7.參考文獻

w3school   

 

 

指令碼之家

 

 

 

8.更多討論

1.Null和Undefined的區別?

 

null和undefined基本同義,只有一些細微的差別。

 

null表示“沒有物件”,即該處不應該有值。

 

(1) 作為函式的引數,表示該函式的引數不是物件。

 

(2) 作為物件原型鏈的終點。

 

undefined表示缺少值,此處應該有值,但是還沒有定義。

 

(1)變數被聲明瞭,但沒有賦值時,就等於undefined。

 

(2) 呼叫函式時,應該提供的引數沒有提供,該引數等於undefined。

 

(3)物件沒有賦值的屬性,該屬性的值為undefined。

 

(4)函式沒有返回值時,預設返回undefined。

 

2.基本資料型別和引用資料型別的區別?

 

在記憶體中的儲存方式不同

 

3.什麼是棧記憶體,什麼是堆記憶體,兩者有什麼區別?

 

棧記憶體:由程式自動向作業系統申請分配以及回收,速度快,使用方便,但程式設計師無法控制。若分配失敗,則提示棧溢位錯誤。注意,const區域性變數也儲存在棧區內,棧區向地址減小的方向增長。

 

堆記憶體:程式設計師向作業系統申請一塊記憶體,當系統收到程式的申請時,會遍歷一個記錄空閒記憶體地址的連結串列,尋找第一個空間大於所申請空間的堆結點,然後將該結點從空閒結點連結串列中刪除,並將該結點的空間分配給程式。分配的速度較慢,地址不連續,容易碎片化。此外,由程式設計師申請,同時也必須由程式設計師負責銷燬,否則則導致記憶體洩露。

關於堆和棧區別的比喻:

堆和棧的區別可以引用一位前輩的比喻來看出:使用棧就象我們去飯館裡吃飯,只管點菜(發出申請)、付錢、和吃(使用),吃飽了就走,不必理會切菜、洗菜等準備工作和洗碗、刷鍋等掃尾工作,他的好處是快捷,但是自由度小。使用堆就象是自己動手做喜歡吃的菜餚,比較麻煩,但是比較符合自己的口味,而且自由度大。

 

9.鳴謝

 

感謝周能、何嶽師兄,在兩位師兄的幫助下順利結束了本節小課堂,感謝!

 

 

PPT連結 視訊連結

更多內容,可以加入IT交流群565734203與大家一起討論交流

這裡是技能樹·IT修真院:https://www.jnshu.com,初學者轉行到網際網路的聚集地