當前位置:
首頁 > 知識 > JS基本類型和引用類型

JS基本類型和引用類型

ECMAScript變數可能包含兩種不同數據類型的值:基本類型值和引用類型值。

基本類型值指的是簡單數據類型的值,比如:Undefined, Null, Number, Boolean, String類型。

引用類型值指那些可能由多個值構成的對象,比如:Object類型。

如何判斷一個變數是否為引用類型呢?

可以通過instanceof方法:

if (variable instanceof Object == true) {
  // variable是引用類型
}

下面從三個方面說明基本類型及引用類型的用法及區別。

1, 動態屬性

不能給基本類型的值動態添加屬性,例如:

var name = "Jack";
name.age = 27;
console.log(name.age); // undefined

可以給引用類型的值動態添加屬性,例如:

var person = {};
person.name = "Jack";
console.log(person.name); // "Jack"

2, 複製變數值

基本類型的複製會創建一個新的值,例如:

var str1 = "a";
var str2 = str1;
str1 = "b";
console.log(str2); // "a"

由此可見,str2隻是str1的一個副本,兩個變數之間可以參與任何操作而不會互相影響。

引用類型的複製則不同,新的變數與原來的變數指向內存中的一個對象,複製操作結束後,兩個變數實際上將引用同一個對象。

因此,改變其中一個變數的值,將影響另一個變數。例如:

var obj1 = {};
var obj2 = obj1;
obj1.name = "Jack";
console.log(obj2.name); // "Jack"

3, 傳遞參數

可以將函數的參數理解為局部變數。基本類型值的傳遞如同基本類型變數的複製一樣,引用類型值的傳遞如同引用類型變數的複製一樣。例如:

基本類型參數:

function add(val) {
val += 10;
return val;
}
var num = 20;
var result = add(num);
console.log(num); // 20
console.log(result); // 30

引用類型參數:

function setName(obj) {
obj.name = "Mark";
}
var person = {};
person.name = "Jack";
setName(person);
console.log(person.name); // "Mark"

總結:

?基本類型值在內存中佔據固定大小的空間,因此保存在棧內存中;

?從一個變數向另一個變數複製基本類型值,會創建這個值的一個副本;

?引用類型的值是對象,保存在堆內存中;

?包含引用類型值的變數,實際上包含的並不是對象本身,而是一個指向該對象的指針;

?從一個變數向另一個變數複製引用類型的值,複製的其實是指針,因此兩個變數最終都指向同一個對象;

?判斷一個值是哪種基本類型可以使用typeof操作符,而判斷一個值是哪種引用類型可以使用instanceof操作符;

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 科技優家 的精彩文章:

vue.js+UEditor集成

TAG:科技優家 |

您可能感興趣

窗帘軌道的基本類型
常用的SSL證書類型及選擇
XSD 雜項 數據類型
Salk研究所開發「通用型」基因編輯工具,可靶向多種突變和細胞類型
伺服器三種DIMM類型的區別及應用
聚合塑料的類型與應用
JS 中對變數類型的判斷
觀眾基本類型分析
電影演員的類型與類型化表演
AB血型君難忘的女生類型
C++模板取函數參數類型和返回值類型的方法
《X4:基石》導彈類型及作用分享
昂的造型:美髮店的經營類型(下)
NBA球衣等級類型詳解
APP引導頁界面類型!
家長類型:專制型、權威型、放養型、溺愛型,你是哪一型?
MySQL-索引類型
VBA之數據類型和常量與變數
MySQL索引類型分析
MySQL資料庫之數據類型