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.參考文獻
8.更多討論
1.Null和Undefined的區別?
null和undefined基本同義,只有一些細微的差別。
null表示“沒有物件”,即該處不應該有值。
(1) 作為函式的引數,表示該函式的引數不是物件。
(2) 作為物件原型鏈的終點。
undefined表示缺少值,此處應該有值,但是還沒有定義。
(1)變數被聲明瞭,但沒有賦值時,就等於undefined。
(2) 呼叫函式時,應該提供的引數沒有提供,該引數等於undefined。
(3)物件沒有賦值的屬性,該屬性的值為undefined。
(4)函式沒有返回值時,預設返回undefined。
2.基本資料型別和引用資料型別的區別?
在記憶體中的儲存方式不同
3.什麼是棧記憶體,什麼是堆記憶體,兩者有什麼區別?
棧記憶體:由程式自動向作業系統申請分配以及回收,速度快,使用方便,但程式設計師無法控制。若分配失敗,則提示棧溢位錯誤。注意,const區域性變數也儲存在棧區內,棧區向地址減小的方向增長。
堆記憶體:程式設計師向作業系統申請一塊記憶體,當系統收到程式的申請時,會遍歷一個記錄空閒記憶體地址的連結串列,尋找第一個空間大於所申請空間的堆結點,然後將該結點從空閒結點連結串列中刪除,並將該結點的空間分配給程式。分配的速度較慢,地址不連續,容易碎片化。此外,由程式設計師申請,同時也必須由程式設計師負責銷燬,否則則導致記憶體洩露。
關於堆和棧區別的比喻:
堆和棧的區別可以引用一位前輩的比喻來看出:使用棧就象我們去飯館裡吃飯,只管點菜(發出申請)、付錢、和吃(使用),吃飽了就走,不必理會切菜、洗菜等準備工作和洗碗、刷鍋等掃尾工作,他的好處是快捷,但是自由度小。使用堆就象是自己動手做喜歡吃的菜餚,比較麻煩,但是比較符合自己的口味,而且自由度大。
9.鳴謝
感謝周能、何嶽師兄,在兩位師兄的幫助下順利結束了本節小課堂,感謝!
更多內容,可以加入IT交流群565734203與大家一起討論交流
這裡是技能樹·IT修真院:https://www.jnshu.com,初學者轉行到網際網路的聚集地