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