js變量中存儲了兩種不同數(shù)據(jù)結構的值 基本類型值
和引用類型值
。
基本類型值
值的是簡單的數(shù)據(jù)段,而引用類型值
是指那些可能由多個值構成的對象。
前端面試時經常會有一個問題:復制變量值。 這道題考察的就是對基本類型值和引用類型值理解了。
復制基本類型值
var num1 = 2;
var num2 = num1
此時,num1中保存的值是2。當使用num1的值來初始化num2時,num2中也保存了值2。但num2中的2與num1中的2是完全獨立,互不影響的,該值知識num1中2的一個副本。此后對兩個變量進行任何操作都互不影響。
復制引用類型值
var obj1 = new Object();
var obj2 = obj1;
obj1.name = "xiaoming";
alert(obj2.name)
當從一個變量向另一個變量復制引用類型值時,同樣也會將存儲在變量對象中的值復制一份放在為新變量分配的空間里,但是這個值的副本其實是一個指針,這個指針指向存儲在堆中的一個對象。復制結束后,兩個變量其實引用的是一個對象。因此,改變一個變量就會影響到另一個變量,因為此刻改變的是堆中共同引用的對象。
值得注意的一點:js中函數(shù)傳遞參數(shù)的時候都是按值傳遞的,就是像基本類型值復制一樣的操作,即使參數(shù)是一個對象,也是按值傳遞,不是按引用傳遞的。